Problem je velmi casty a zrejme velmi oblubeny - neprecitany znak noveho riadku, ktory sa precita az v nasledujucom cyke.
Riesenie ( ktore ti sice pomoze vyriesit tento konkretny problem, ale mozno nepomoze inokedy ):
- v prikaze fscanf napis za posledny %s aj znak noveho riadku \n, cize celkovo to bude vyzerat takto ( +poznamka - ak nacitavas retazec cez %s, v premennej uz neuvadzaj ampersant & )
Kód:
#include <stdio.h>
int main()
{
int i, pocet, stav, cu;
double suma;
char datum[20], transakcia[40];
FILE *fr;
fr = fopen( "input", "r" );
if ( fr == NULL )
return 1;
pocet = 4;
for( i = 0 ; i < pocet ; i++)
{
fgets( transakcia, 40, fr );
fscanf( fr, "%d %d %lf %s\n", &stav, &cu, &suma, datum ); /* precitaj aj novy riadok */
printf( "Transakcia: %s", transakcia );
if ( stav == 1 )
{
printf("Kredit/Debet: 1\n");
}
else
printf("Kredit/Debet: 0\n");
printf( "Cislo uctu kam/odkial idu peniaze: %d\nSuma: %.2lf\nDatum: %s\n\n", cu, suma, datum );
}
rewind(fr);
fclose( fr );
return 0;
}
Riesenie 2 ( ktore by som vrelo odporucal pouzivat ):
Nauc sa zapisovat/citat binarne, to znamena pracovat s presnymi velkostami dat a nehrozi, ze sa zabudne precitat nejaky znak, alebo sa nahodou nejako prekombinuje citatanie a zapise sa povedzme udaj do nespravnej premennej a podobne. Povedzme, ze potrebujeme zapisat do suboru 4 polozky: meno, adresu, vek a vysku v metroch. Vytvorime si strukturu:
Kód:
typedef struct {
char meno[30];
char adresa[50];
int vek;
double vyska;
} NasaStruktura;
NasaStruktura ns = { "Moje meno", "moja adresa", 33, 200.5 };
/* zapis */
pFile = fopen ( "subor" , "wb" );
fwrite( (void*) &ns, 1, sizeof( NasaStruktura ), pFile );
/* citanie */
pFile = fopen( "subor", "rb" );
fread( (void*) &ns, 1, sizeof( NasaStruktura ), pFile );
Takto po precitani mas vsetky data vyplnene bez akejkolvek obavy, ze sa nieco precitalo nespravne ( za predpokladu, ze aj zapis bol vykonany takymto sposobom ).
P.S.: priklad som pisal z hlavy, momentalne dost nestiham, tak dufam, ze je bez chyb.