[ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.04.12
Prihlásený: 06.06.13
Príspevky: 23
Témy: 10 | 10
NapísalOffline : 17.11.2012 1:24 | Jazyk C problem please help

mam takuto funkciu


Kód:
int pole()
{
     FILE *fr;
    char s1[30];
    char s2[30];
    char s3[30];
   char s4[30];
    int c1,c2,x=0,pz=0;
    float f1=0;
    float *p_x;

        
   fr=fopen(ZAJAZDY,"r");
    if(fr == NULL){printf("Neotvoreny subor\0");
        return 1;}


while (feof(fr) == 0){
        fgets(s1 , 30 , fr);
       fgets(s2 , 30 , fr);
      fgets(s3 , 30 , fr);
      fscanf(fr,"%d\n", &c1);
        fscanf(fr,"%lf\n", &f1);
       fgets(s4 , 30 , fr);
      fscanf_s(fr,"%d\n", &c2);
      pz++;
    }
   
    p_x = ((float*) malloc(pz * sizeof(float)));
   rewind(fr);
    while (feof(fr) == 0){
        fgets(s1 , 30 , fr);
       fgets(s2 , 30 , fr);
      fgets(s3 , 30 , fr);
      fscanf(fr,"%d\n", &c1);
        fscanf(fr,"%lf\n", &f1);
        fgets(s4 , 30 , fr);
      fscanf(fr,"%d\n", &c2);
      *(p_x+x)=f1;
        x++;

       }
return 0;
}









a hadze mi chybu ze stack around variable f1 is corupted neviem kde je chyba predtym mi to islo a podla mna je to spravne ale tak fakt neviem prosim ak by ste sa nato mrkli


Offline

Užívateľ
Užívateľ
Jazyk C problem please help

Registrovaný: 24.07.10
Prihlásený: 05.04.26
Príspevky: 107
Témy: 28 | 28
NapísalOffline : 17.11.2012 1:45 | Jazyk C problem please help

myslím, že máš problém v pointerovej aritmetike nemôžeš dať *(p_x+x) lebo float má veľkosť 2 ak sa nemýlim. Použi radšej niečo ako:
*(p_x+sizeof(float)*x)=f1;
alebo x-ko inkrementuj ako x+=sizeof(float);


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 17.11.2012 13:41 | Jazyk C problem please help

silentasflash píše:
nemôžeš dať *(p_x+x) lebo float má veľkosť 2 ak sa nemýlim

Mýliš, to by bolo veľmi divné, keby float mal byty (na akejkoľvek platforme)

A samozrejme môže to tak urobiť. Keď pripočítaš k pointru jednotku, prejde sa na ďalšiu adresu (ktorá sa vypočíta práve ako píšeš - p+sizeof(*p)) Toto robí Cčko za teba automaticky. Ty by si sa teda posunul o sizeof(float) prvkov dopredu


Ja tam vidím problém skôr v tom, že format pre float je %f (nie %lf, ten je pre double)


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Jazyk C problem please help

Registrovaný: 24.07.10
Prihlásený: 05.04.26
Príspevky: 107
Témy: 28 | 28
NapísalOffline : 17.11.2012 15:01 | Jazyk C problem please help

no tak ako má tam viac chýb v podstate je to úplne strašné
takto by to malo vyzerať správne:

Kód:
int pole()
{
     FILE *fr;
    char s1[30];
    char s2[30];
    char s3[30];
   char s4[30];
    int c1,c2,x=0,pz=0;
    float f1=0;
    float *p_x;

       
   fr=fopen(ZAJAZDY,"r");
    if(fr == NULL){printf("Neotvoreny subor\n"); //na koniec riadku sluzi \n nie \0
        return 1;}


while (feof(fr) == 0){
        fgets(s1 , 30 , fr);
       fgets(s2 , 30 , fr);
      fgets(s3 , 30 , fr);
      fscanf(fr,"%d\n", &c1);
        fscanf(fr,"%f\n", &f1); //kedze chces pracovat s floatom, musis aj nacitat ako float, inak prepisujes nejaku inu pamet, preto pouzijes %f nie %lf
        //totiz %lf-om nacitavas do typu double, ktory ma 4B float ma len 2B
       fgets(s4 , 30 , fr);
      fscanf(fr,"%d\n", &c2); //nechapem preco pouziovas fscanf_s ked to je len projekt do skoly staci ti fscanf
      pz++;
    }
   
    p_x = ((float*) malloc(pz * sizeof(float)));
   rewind(fr);
    while (feof(fr) == 0){
        fgets(s1 , 30 , fr);
       fgets(s2 , 30 , fr);
      fgets(s3 , 30 , fr);
      fscanf(fr,"%d\n", &c1);
        fscanf(fr,"%f\n", &f1); //opet - nie %lf ale %f
        fgets(s4 , 30 , fr);
      fscanf(fr,"%d\n", &c2);
      *(p_x+x)=f1;      //mas na vyber bud takto
        x++;
        /*alebo to mozes urobit aj takto:
         *p_x=f1;
         p_x+=sizeof(float);
         alebo este jedna moznost
         p_x[x]=f1;
         x++;
         */

       }
return 0;
}

opravy sú popísané v komentároch v kóde, kukni
btw mám taky pocit, že potrebuješ pracovať s tým poľom aj mimo funkcie, potom si skús teda funkciu nejako upraviť aby ti returnovala to pole a nejakú veľkosť toho poľa, to už nechávam na tebe


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 17.11.2012 15:18 | Jazyk C problem please help

silentasflash: V ktorom vesmíre je float 2 bytový?! Float má podľa štandardu IEEE 32 bitov, double má potom dva krát toľko. Aj v v drvivej väčšine mikrontrolérov nájdeš tento štandard a žiadny iný.

A stále tam pripočítavaš sizeof(float)... nedáš si povedať.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Jazyk C problem please help

Registrovaný: 24.07.10
Prihlásený: 05.04.26
Príspevky: 107
Témy: 28 | 28
NapísalOffline : 17.11.2012 15:48 | Jazyk C problem please help

okok sú to 4B nie 2B a double má 8B písal som, že si nepamätám presne, ale to je detail
dôležitý je ten rozdiel
ok ok v tých pointeroch máš tiež pravdu, pomýlil som si to vzhľadom k inému projektu, kt. som robil, už mám z toho plnú hlavu

takže problém bol len v tom načítavaní pri scanf si tam nemal dať %lf ale len %f
konec


 [ Príspevkov: 6 ] 


Jazyk C problem please help



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Please HELP

v Pevné disky a radiče

5

600

11.08.2007 12:29

johny_sk

V tomto fóre nie sú ďalšie neprečítané témy.

Spyware..... please help

v Antivírusy a ochrana

8

650

02.08.2008 20:58

dedko45

V tomto fóre nie sú ďalšie neprečítané témy.

PLEASE HELP ! NOVÁ KARTA HAPRUJE

v AMD grafické karty

12

737

09.10.2007 9:58

FesterE36

V tomto fóre nie sú ďalšie neprečítané témy.

PLEASE HELP! NEJDE MI ZVUK

v Zvuk

2

517

13.10.2007 15:00

OmeGa

V tomto fóre nie sú ďalšie neprečítané témy.

uTorrent 1.6 help please

v Sieťové programy

6

1338

29.11.2006 11:58

Shit

V tomto fóre nie sú ďalšie neprečítané témy.

100% výkon procesora - HELP PLEASE

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Intel

35

5068

16.11.2010 12:06

chio11

V tomto fóre nie sú ďalšie neprečítané témy.

ATI RADEON 9550 help please

v AMD grafické karty

18

1212

18.03.2008 1:11

walther

V tomto fóre nie sú ďalšie neprečítané témy.

HELP PLEASE !!! vnutorna chyba 2343

v Ovládače

3

768

13.12.2008 0:51

salamoon

V tomto fóre nie sú ďalšie neprečítané témy.

M3PLUGIN.DLL please help me

v Windows

0

422

14.05.2010 16:04

Erika

V tomto fóre nie sú ďalšie neprečítané témy.

Ide o kontrolu dát. Help please.

v Frontend

2

777

31.03.2007 9:47

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

e-shop trocha komplikovanejšie - HELP PLEASE

v Databázy

5

722

24.04.2010 13:18

pola negri

V tomto fóre nie sú ďalšie neprečítané témy.

Please help s IP4 3,6Ghz.

v Biosy a ladenie výkonu

2

526

16.10.2007 11:58

lednicky1

V tomto fóre nie sú ďalšie neprečítané témy.

Webstranka mi velmi pomaly ide, Please help

v Sieťové programy

1

479

02.04.2011 19:29

walther

V tomto fóre nie sú ďalšie neprečítané témy.

PLEASE HELP - Nový PC a kritická chyba...

v Windows

26

1663

04.08.2006 9:30

AMDman

V tomto fóre nie sú ďalšie neprečítané témy.

Odrazu nestíha zvuk - seká, preskakuje, praská. HELP PLEASE

v Zvuk

6

784

27.06.2012 11:21

Bloodeye

V tomto fóre nie sú ďalšie neprečítané témy.

SQL PLEASE HELP ...zobrazenie všetkých riadkov až na..

v Databázy

6

479

25.11.2013 7:59

ChickenHunter79



© 2005 - 2026 PCforum, edited by JanoF