
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.
fscanf nevrací EOF. Musíš testovat ten přečtený znak. Lepší je použít funkci fgetc.
fgetc
preco pouzivas fscanf na znak? fgetc.
fscanf vracia pocet nacitanych znakov. Takze ked chces fscanf, tak testovat navratovu hodnotu oproti 0
Ak pouzivas kniznicne funkcie tak musis citat refernciu (napr. na msdn.microsoft.com alebo googgle: fscanf) a tam sekciu parametre a sekciu return value atd
A ten neopravneny pristup do pamati je asi kvoli tomu ze mu tam davas pointer len na char, a on ti tam chce asi (tipujem) nacpat nejaky 2bajtovy error kod do premennej znak. Neviem naisto len tak uvazujem :)
No jo, ale když použiji funkci:
tak to dělá úplně to stejný, proto mě to mate
nemoze to delat to stejny. Si to asi neskompiloval alebo spustas iny exe apod.
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");