Kezdőoldal » Számítástechnika » Programozás » Miért nem olvassa be a C...

Miért nem olvassa be a C programomban az fscanf az értékeket?

Figyelt kérdés

Egy txt fájlból akarom beolvasni a mátrixot és azt egy két dimenziós tömbben eltárolni. Először meghatározom, hogy hány soros és hány oszlopos a mátrix, és csak azokkal foglalkozom, amelyek szabályosak (sor=oszlop).

Valami baj van az fscanf környékén, mert nem olvas be semmit, csak nullákat (amiket viszont a printf kiír).



#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main( int argc, char *argv[] )

{


FILE *fp=fopen(argv[1],"r");


if (fp == NULL)

{

printf("Nem tudom megnyitni %s\n", argv[1]);

}


int sor,szam;

char ch;

sor=0;

szam=0;


while(ch != EOF)

{

ch=fgetc(fp);

if(ch=='\n')

sor++;

if(ch==' ' || ch=='\t')

szam++;

}


printf("Sor:%d\n szam:%d\n", sor, szam+sor);


int x,y;

x=sor*sor;

y=szam+sor;


if(x != y)

{

printf("Nem szabalyos a megadott matrix!\n");

}

else

{

int j,k;

int m[100][100];

for(j=0;j<sor;j++)

{

for(k=0;k<sor;k++)

{

fscanf(fp,"%d", &m[j][k]);

}


}

for (j=0; j<sor; j++)

{

for(k=0; k<sor; k++)

{

printf("%d ", m[j][k]);

}

printf("\n");

}


}


system("PAUSE");


}


2014. nov. 19. 15:30
 1/8 anonim ***** válasza:

Szerintem azért, mert itt:

"while(ch != EOF)

{

ch=fgetc(fp);

if(ch=='\n')

sor++;

if(ch==' ' || ch=='\t')

szam++;

} "


Végigolvasod a fájlt. Tehát a fájl legeslegvégén kezdenél el számokat (a mátrix elemeit) beolvasni. Amik ugye nem ott vannak.

Elvileg vissza lehet állítani a fájl pointert a fájlod elejére, bár ezt még nem használtam:

rewind(fp);


Vagy lezárod az fp-t és megnyitod újra a fájlt.

2014. nov. 19. 15:45
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:
Igen, ez volt a baj, köszi szépen! :)
2014. nov. 19. 15:49
 3/8 A kérdező kommentje:
Annyit szeretnék még kérdezni, hogy ha ezt a programot linux-kompatibilissé szeretném tenni, akkor a conio header-en és a system(pause) kivételén kívül át kell állítanom az argv[1] -et argv[2]-re? A linuxot annyira nem ismerem, de szerintem az argv[1] az az a.out vagy micsoda lesz ott.
2014. nov. 19. 15:54
 4/8 anonim ***** válasza:

Nem tudom.

De szerintem (tipp) ugyanúgy van Linuxon is: 0 -> fájlnév, 1-től a paraméterek

2014. nov. 19. 16:14
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

[link]


Ez például egy Linuxos példa (a futtatás módjából gondolom), és itt ugyanúgy van.

2014. nov. 19. 16:16
Hasznos számodra ez a válasz?
 6/8 uno20001 ***** válasza:
Igen, az argumentumok kezelése ugyanúgy van. Elsőre nem látom, minek neked a conio.h. Plusz igen, a system("pause")-t kell lecserélned pl. getchar()-ra.
2014. nov. 19. 16:23
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:

Köszönöm.

A conio.h a system("pause")-hoz kellett. Én codeblocks-ban írom a programot, és úgy futtatok "parancssorból", hogy a codeblocks által generált .exe fájl-ról készítekk egy parancsikont, amire jobb egérgombbal rámegyek és a target-nek a végére odaírom a .txt fájlt.

Ha nem tenném bele a system("pause")-t, akkor olyan gyorsan zárulna be a program, hogy meg se tudnám nézni, jól működik-e.

2014. nov. 19. 16:30
 8/8 uno20001 ***** válasza:

Amint a referenciában is láthatod ( [link] ) a system függvény nem, a conio.h-ban, hanem az stdlib.h-ban van.


[link] system/

2014. nov. 19. 22:33
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!