
Nefunguje EOF
Dobrý den,
mám menší problém s programem v jazyce C.
Ze souboru txt načítám matici a vypisuji, ovšem z nějakého pro mě neznámého důvodu tento kód nepracuje tak jak bych chtěl:
int pruchod = 0;
char znak;
while(fscanf(file, "%c", &znak) != EOF){
printf("%c", znak);
pruchod++;
}
V souboru je matice:
4 5
0 0 1 1 1
0 0 1 0 1
1 0 1 1 1
1 1 1 1 1
kde 4 a 5 reprezentuje počet řádků a sloupců
jenže výpis mi dělá toto:
0 0 1 1 1
0 0 1 0 1
1 0 1 1 1
1 1 1 1 1 [zde se zobrazí divný znak]
a pak se vypíše: "Neoprávněný přístup do paměti (SIGSEGV) (core dumped [obraz paměti uložen])"
a program padne, z nějakého důvodu nefunguje podmínka pro EOF, nevíte prosím někdo co s tím?
Pokoušel jsem se i o obdobu s funkcí fgetc, ale dopadlo to stejně, prostě to padne na tom EOF.
No jo, ale když použiji funkci:
tak to dělá úplně to stejný, proto mě to mate
file si otvoril jak?
Právě jsem nad tím seděl asi 5 hodin a už mě vážně nic nenapadá, zkoušel jsem i samostatnou funkci feof, prostě to projde celou matici a na konci to vypíše nějaký hranatý znak a pak neoprávněný přístup do paměti. Prostě z nějakýho nepochopitelnýho důvodu to neověří EOF, prostě to čte dál
To co si sem dal s tym fgetc je OK, takze problem hladaj inde, ne v EOF. Pravdepodobne spustas uplne ine exe a nie to skompilovane. A kazde vyvojove prostredie ma aj debugger kde si to vies odkrokovat resp. nastavit breakpoint.
alebo daj si vypisovat %d a ne %c a uvidis co tam cita z toho suboru. Mozes si to aj porovnat so suborom otvrenym hexeditorom (alebo totalcomander klavesy F3 a 3)
co mas v programe po tom while? Preco sem nedas cely zdrojak?
Jde o funkci která má načtené hodnoty ukládat do pole, momentálně to dělá pouze výpis (pro kontrolu) no a tady jsem skončil, zkoušel jsem to různě upravit, ale prostě nic.
Ohledně spouštění exe, to bylo jedno z prvních co kontroluji, kdyby to byla taková prkotina, tak bych nad tím neseděl 5 hodin, popravdě jsem tak trochu už bezradnej, protože jsem vyčerpal své vědomosti (možnosti) a nemůžu s tím hnout. Pokusím se rozpochodovat ještě v jiným prostředí...
fgetc
co to teda vypisuje? (a vyhod uplne to %c prec)
preco nepouzijes debugger?
Co sa deje po navrate z funkcie nacti_matici ?
Chjo. Chlpata deka.
P.S. ked nevies pouzivat debugger tak si za tu sluscku while daj
printf("som za EOF\n");