Kezdőoldal » Számítástechnika » Programozás » Miért olvas be rosszul a...

Miért olvas be rosszul a program C-ben?

Figyelt kérdés

Van egy függvényem, amely egy fileból beolvassa a véletlenedik sort. Reallocal csinálom, tudom, hogy szörnyű és nem is ez lesz a végleges, csak egy valami érdekel: miért mindig a második sor lesz az amit beolvas? Hogy oldhatnám meg ezt?


srand(time(NULL));

int num=1;

char* onerow=(char*) malloc(num*sizeof(char));

int row=rand()%1000;

char c;


FILE *fp;

fp = fopen("proba.txt", "r");


for (int i=0; i<=row-1; i++) {

if(i!=row-1) { //not the row we need, jump over it

while(c!='\n')

c=fgetc(fp);

}

if(i==row-1) {

for(int j=0; onerow[j]!='\n'; j++) { //this is what we need

onerow[j]=fgetc(fp);

onerow = (char *) realloc(onerow, ++num*sizeof(char));

}

}

}

onerow[num]='\0';

fclose(fp);

printf("%s\n", onerow);

free(onerow);

}



2017. nov. 13. 13:57
 1/3 anonim ***** válasza:
100%

Ez a kulcs:

while(c!='\n')

_ c=fgetc(fp);

}


Elso sor vege, c-be belekerul az ujsor.

For ciklus kezdodik ujra, megprobal atugrani a masodik soron.

Viszont c-ben meg mindig az elso sor ujsor karaktere van, ezert a kurzor a 2. sorban toporog, mikozben azt hiszed hogy megy vegig a sorokon.

Vegen leszamolt row-1 sort, aztan beolvassa a masodikat.

2017. nov. 13. 15:18
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Köszi! Akkor a while ciklus után egy egyszerű c-nek való értékadással (ami nem \n) megoldható a probléma.
2017. nov. 13. 17:51
 3/3 anonim ***** válasza:
Szebb egy do{}while (hatultesztelos) ciklussal, de az eredmeny ugyanaz.
2017. nov. 13. 17:53
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!