PDA

View Full Version : problemino fprintf e fscanf in C++


Jarlaxle
16-09-2003, 13:11
salve a tutti,
per imparer bene l'utilizzo di queste due funzioni ho provato a scrivere un programmino che partendo da due file txt (filein.txt e fileout.txt) facesse la seguente operazione:
avendo in filein.txt questo:

Numero 1 : 34
Numero 2 : 44
Numero 1 : 87

il programma dovrebbe leggere il filein e scrivere nel fileout.txt questo:

34
44
87

il codice del programma e' questo:

/*Prova di utilizzo di istruzioni su file*/

#include <stdio.h>

FILE *in;
FILE *out;

void main( void )
{
int uno , due , tre ;

in = fopen( "filein.txt" , "r" );

out = fopen( "fileout.txt" , "w" );

fscanf( in , "numero 1 : %d\n" , &uno );
fscanf( in , "numero 2 : %d\n" , &due );
fscanf( in , "numero 3 : %d\n" , &tre );

fprintf( out , "%d\n" , uno );
fprintf( out , "%d\n" , due );
fprintf( out , "%d\n" , tre );

fclose( out );
fclose( in);
}

pero' se faccio andare il programma e guardo il fileout.txt mi ritrovo questo:

-858993460
-858993460
-858993460

qualcuno sa dove ho sbagliato e come correggere il programma??

Grazie mille!

Luc@s
16-09-2003, 13:18
ma usare l'i/O del C++ no, eh?


#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <fstream>
#define MAX_BUF 12000
using namespace std;

ostream& scrivi( ostream& , string );
string leggi( istream& );

int main()
{
ifstream in;
in.open( "C:\\io.txt" );
ofstream out;
out.open( "C:\\DirectXOLD.txt" );
scrivi( out, leggi( in ) );
cout << "\n";
system( "PAUSE" );
return 0;
}

ostream& scrivi( ostream& out, string mesg )
{
out << mesg;
return out;
}

string leggi( istream& in)
{
string str;
char buf[MAX_BUF+1];
while(!in.eof())
{
in.read(buf, MAX_BUF);
str.append(buf, in.gcount());
}
return str;
}

Jarlaxle
16-09-2003, 13:38
si ma come si spiega la strano risultato del mi programma?

Kleidemos
16-09-2003, 13:40
devono essere numeri assegnati a caso dal compilatore:D

Jarlaxle
16-09-2003, 13:43
ok e qual'e' il problema per cui non funziona il programma?

lovaz
16-09-2003, 13:52
Originariamente inviato da Jarlaxle
ok e qual'e' il problema per cui non funziona il programma?
Questo:
fscanf( in , "numero 1 : %d\n" , &uno );
Il secondo parametro e' una stringa in cui specifichi il formato con cui memorizzare il dato (in questo caso "%d"), e non cosa saltare nel file.

Jarlaxle
16-09-2003, 13:54
e per memorizzare solo il numero e non la stringa come dovrei dovrei utilizzare l'istruzione??

lovaz
16-09-2003, 13:57
Prima di leggere con fscanf dovresti fare un fseek di una decina di byte (fa' delle prove).
Per esempio:
fseek(in,10,SEEK_CUR);

Jarlaxle
16-09-2003, 14:02
ci guardero' pero anche mettendo nel file in
4
e usando fscanftf( in, "%d\n" , &uno);
non funziona
come puo' essere??? mentre in questo caso se uso
printf( "%d\n" , uno);
sullo schermo compare 4 mentre nel file out compare quello schifo!

lovaz
16-09-2003, 14:14
Ho fatto la prova, cosi' funziona:

...
fseek(in,10,SEEK_CUR);
fscanf( in , "%d" , &uno );
...

Naturalmente questa e' una soluzione molto artigianale...

Fenomeno85
16-09-2003, 19:30
Originariamente inviato da Jarlaxle
ci guardero' pero anche mettendo nel file in
4
e usando fscanftf( in, "%d\n" , &uno);
non funziona
come puo' essere??? mentre in questo caso se uso
printf( "%d\n" , uno);
sullo schermo compare 4 mentre nel file out compare quello schifo!

sign irregolare ... che cosa fa fprintf?? conosco printf

Jarlaxle
17-09-2003, 11:11
lovaz la soluzione con fseek che hai postato funziona con che testo all'interno di filein.txt??

numero 1 : 4

oppure

4

quale???

Jarlaxle
17-09-2003, 11:13
X Fenomeno85: fprintf ha la stessa funzione di printf ma stampa la stringa all'interno del file specificato nel primo parametro della funzione

lovaz
17-09-2003, 11:33
Originariamente inviato da Jarlaxle
lovaz la soluzione con fseek che hai postato funziona con che testo all'interno di filein.txt??

numero 1 : 4

oppure

4

quale???
la prima che hai detto

Fenomeno85
17-09-2003, 13:17
Originariamente inviato da Jarlaxle
X Fenomeno85: fprintf ha la stessa funzione di printf ma stampa la stringa all'interno del file specificato nel primo parametro della funzione

ok grazie

Jarlaxle
17-09-2003, 18:19
X lovaz : Grazie mille!

XFenomeno85 : di nulla!

:)