Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 17.11.2012 1:24

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ý: 19.11.22
Príspevky: 107
Témy: 28
Bydlisko: Bratislava
Príspevok NapísalOffline : 17.11.2012 1:45

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);







_________________
silentaslash || tiwdaym || tou(x)?
NTB: ASUS ROG G752VS (KBL)-GB393T, CPU: Intel Core i7 7700HQ Kaby Lake, Display: 17.3" LED 3840x2160 IPS matný, RAM: 32GB DDR4, GPU: NVIDIA GeForce GTX 1070 8GB GDDR5, SSD: SSD 256GB PCIe + WD Blue PC SSD 1 TB M.2 HDD: 2TB Seagate Barracuda Laptop OS: Windows 10 64-bit
Periférie: monitor: 4k 28" ASUS MG28UQ klávesnica: Corsair Gaming straf Cherry MX Silent (US) myš: A4tech Bloody J90 Core 3 kovové pojazdy
NAS: Synology DiskStation DS1517 + 8GB HDD: RAID5 (synology): WD Red Plus 4TB + 2x Seagate IronWolf 4 TB
Wifi: ASUS RT-AC87U AC2400
Mobil: OnePlus 3T, 64GB
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
Príspevok NapísalOffline : 17.11.2012 13:41

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ý: 19.11.22
Príspevky: 107
Témy: 28
Bydlisko: Bratislava
Príspevok NapísalOffline : 17.11.2012 15:01

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







_________________
silentaslash || tiwdaym || tou(x)?
NTB: ASUS ROG G752VS (KBL)-GB393T, CPU: Intel Core i7 7700HQ Kaby Lake, Display: 17.3" LED 3840x2160 IPS matný, RAM: 32GB DDR4, GPU: NVIDIA GeForce GTX 1070 8GB GDDR5, SSD: SSD 256GB PCIe + WD Blue PC SSD 1 TB M.2 HDD: 2TB Seagate Barracuda Laptop OS: Windows 10 64-bit
Periférie: monitor: 4k 28" ASUS MG28UQ klávesnica: Corsair Gaming straf Cherry MX Silent (US) myš: A4tech Bloody J90 Core 3 kovové pojazdy
NAS: Synology DiskStation DS1517 + 8GB HDD: RAID5 (synology): WD Red Plus 4TB + 2x Seagate IronWolf 4 TB
Wifi: ASUS RT-AC87U AC2400
Mobil: OnePlus 3T, 64GB
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
Príspevok NapísalOffline : 17.11.2012 15:18

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ý: 19.11.22
Príspevky: 107
Témy: 28
Bydlisko: Bratislava
Príspevok NapísalOffline : 17.11.2012 15:48

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







_________________
silentaslash || tiwdaym || tou(x)?
NTB: ASUS ROG G752VS (KBL)-GB393T, CPU: Intel Core i7 7700HQ Kaby Lake, Display: 17.3" LED 3840x2160 IPS matný, RAM: 32GB DDR4, GPU: NVIDIA GeForce GTX 1070 8GB GDDR5, SSD: SSD 256GB PCIe + WD Blue PC SSD 1 TB M.2 HDD: 2TB Seagate Barracuda Laptop OS: Windows 10 64-bit
Periférie: monitor: 4k 28" ASUS MG28UQ klávesnica: Corsair Gaming straf Cherry MX Silent (US) myš: A4tech Bloody J90 Core 3 kovové pojazdy
NAS: Synology DiskStation DS1517 + 8GB HDD: RAID5 (synology): WD Red Plus 4TB + 2x Seagate IronWolf 4 TB
Wifi: ASUS RT-AC87U AC2400
Mobil: OnePlus 3T, 64GB
Odpovedať na tému [ Príspevkov: 6 ] 


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

527

11.08.2007 12:29

johny_sk Zobrazenie posledných príspevkov

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

v Antivíry a antispywary

8

571

02.08.2008 20:58

dedko45 Zobrazenie posledných príspevkov

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

v ATI/AMD grafické karty

18

1101

18.03.2008 1:11

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. HELP PLEASE !!! vnutorna chyba 2343

v Ovládače

3

700

13.12.2008 0:51

salamoon Zobrazenie posledných príspevkov

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

v Operačné systémy Microsoft

0

361

14.05.2010 16:04

Erika Zobrazenie posledných príspevkov

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

v Sieťové a internetové programy

6

1197

29.11.2006 11:58

Shit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PLEASE HELP ! NOVÁ KARTA HAPRUJE

v ATI/AMD grafické karty

12

667

09.10.2007 9:58

FesterE36 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PLEASE HELP! NEJDE MI ZVUK

v Zvuk

2

462

13.10.2007 15:00

OmeGa Zobrazenie posledných príspevkov

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 - Integrated Electronics

35

4829

16.11.2010 12:06

chio11 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. e-shop trocha komplikovanejšie - HELP PLEASE

v Databázy

5

628

24.04.2010 13:18

pola negri Zobrazenie posledných príspevkov

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

464

16.10.2007 11:58

lednicky1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ide o kontrolu dát. Help please.

v JavaScript, VBScript, Ajax

2

695

31.03.2007 9:47

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PLEASE HELP - Nový PC a kritická chyba...

v Operačné systémy Microsoft

26

1550

04.08.2006 9:30

AMDman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Webstranka mi velmi pomaly ide, Please help

v Sieťové a internetové programy

1

404

02.04.2011 19:29

walther Zobrazenie posledných príspevkov

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

404

25.11.2013 7:59

ChickenHunter79 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Odrazu nestíha zvuk - seká, preskakuje, praská. HELP PLEASE

v Zvuk

6

696

27.06.2012 11:21

Bloodeye Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra