Miért nem olvassa be a C programomban az fscanf az értékeket?
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");
}
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.
Nem tudom.
De szerintem (tipp) ugyanúgy van Linuxon is: 0 -> fájlnév, 1-től a paraméterek
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!