Ahoj,
mám soubor "temp.txt", kam ukládám matici v následujícím formátu:
M + ( ) d *
S 1 1 - - 2
A 5 3 5 - -
B 4 - - - 4
Jedná se tedy o matici různých znaků (ne jen intů). Já bych tuto matici chtěl načíst do dvourozměrného pole.
Našel jsem si tady na fóru, že už se to řešilo, použil jsem tedy kód, který tu byl k dispozici - ovšem nefunguje a já se už tři hodiny snažím najít chybu... pokud byste mi pomohli, byl bych rád :-)
Zjistil jsem, že chyba (zacyklení) je způsobena druhým while cyklem v tomto úseku kódu:
while((c = getc(fr)) != EOF) /* přečtení souboru */
{
printf("1. while\n");
while((c =getc(fr)) != '\n')
{
printf("2. while\n");
if(c == ' ' ) //mezer je vzdy o 1 min nez cisel , nekde pridat +1
{
velikostiMnozin[i]++;
}
}
velikostiMnozin[i]++; // zde pridavam tu +1
i++;
}
Chápu, že v prvním while cyklu se jede až na konec souboru, v druhém pak na konec řádky - tím se dostanou řádky i sloupce z matice.. ale nechápu, proč se to cyklí.. (2. while se vypisuje do nekonečna)
Zde je celý kód:
#include <stdio.h>
#include <stdlib.h>
char c;
int pocetMnozin= 0;
int PocetMnozin(FILE * fr)
{ // kvuli poctu mnozin(radku) matice
while((c = getc(fr)) != EOF)
{
if(c == '\n'){pocetMnozin++;}
}
}
int main (void)
{
FILE *fr;
if((fr = fopen("mnoziny.txt","r")) == NULL)
{ //test otevreni
printf("Soubor se nepodarilo otevrit.\n");
system("pause");
return 1;
}
int i=0;
PocetMnozin(fr);
printf("pocet mnozin (radku) %d\n",pocetMnozin);
int *velikostiMnozin; //jednorozmerne pole
velikostiMnozin= (int*) calloc( pocetMnozin , sizeof(int));
printf("dadadad");
rewind(fr);
while((c = getc(fr)) != EOF) /* přečtení souboru */
{
printf("1. while\n");
while((c =getc(fr)) != '\n')
{
printf("2. while\n");
if(c == ' ' ) //mezer je vzdy o 1 min nez cisel , nekde pridat +1
{
velikostiMnozin[i]++;
}
}
velikostiMnozin[i]++; // zde pridavam tu +1
i++;
}
printf("faafaffa");
int **mnozinyPole; //matice pro mnoziny
mnozinyPole = (int **)calloc( pocetMnozin , sizeof(int *)); //zde si alokuju kolik ma mit matice radku
int j = 0;
rewind(fr);
for(i= 0; i< pocetMnozin ; i++)
{
mnozinyPole[i] = (int *)calloc( velikostiMnozin[i] , sizeof(int)); //tady alokuju sloupecky kazdeho radku
for(j=0; j<velikostiMnozin[i]; j++)
{
fscanf(fr, "%d", &mnozinyPole[i][j]); //tady matici plním
}
}
printf("\n\n\n\n");
for(i = 0; i < pocetMnozin ; i++)
{ //vypis finalni matice
for (j = 0; j < velikostiMnozin[i]; j++)
printf("%i ", mnozinyPole[i][j]);
printf("\n");
}
if (fclose(fr) == EOF)
{ /* test zavření souboru*/
printf("Soubor se neporadilo zavrit\n");
return 1;
}
system("PAUSE");
return 0;
}