Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
No jo, ale když použiji funkci: int znak; while((znak = fgetc(file)) != EOF){ printf("%c", znak); p…
franta159 30.11.2013 22:51
franta159
file si otvoril jak?
MM.. 30.11.2013 22:58
MM..
Právě jsem nad tím seděl asi 5 hodin a už mě vážně nic nenapadá, zkoušel jsem i samostatnou funkci f…
franta159 30.11.2013 23:12
franta159
co mas v programe po tom while? Preco sem nedas cely zdrojak?
MM.. 30.11.2013 23:20
MM..
int nacti_matici(Bitmap *matice, const char *soubor_nazev){ int radky = 0; int sloupce = 0; FILE *fi… nový
franta159 30.11.2013 23:31
franta159
fgetc co to teda vypisuje? (a vyhod uplne to %c prec) preco nepouzijes debugger? nový
MM.. 01.12.2013 09:55
MM..
Co sa deje po navrate z funkcie nacti_matici ? Chjo. Chlpata deka. P.S. ked nevies pouzivat debugge… poslední
MM.. 01.12.2013 09:57
MM..

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

int nacti_matici(Bitmap *matice, const char *soubor_nazev){
	int radky = 0;
	int sloupce = 0;
	FILE *file = fopen(soubor_nazev,"r");
	if(file==NULL){
		tiskChyba(ERROR_FILE);
		return 0;
	}
	if(fscanf(file,"%d%d",&radky,&sloupce)!=2)
	{
		tiskChyba(ERROR_MATICE_BAD);
		fclose(file);
		return 0;
	}
	if(rozmer_matice_param(sloupce, radky)==0){
		tiskChyba(ERROR_MATICE_BAD);
		fclose(file);
		return 0;
	}
	matice->radky = radky;
	matice->sloupce = sloupce;
	int pruchod = 0; 
	int znak;

	while((znak = getc(file))!=EOF){
		printf("%d-%c",znak, znak);
                pruchod++;
	}
	fclose(file);
	return 1;
}

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í...

Zpět do poradny Odpovědět na původní otázku Nahoru