Fread fwrite

di Anonimizzato22886 il
11 risposte
Sto lavorando ad un programma che dato un file fa scegliere all' utente se leggero o scriverci sopra.. ma parete della write non và, quando eseguo il programma e scelgo di scrivere il programma termina.. qualè il problema?

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
	char ciao[100];
	char ciao1[100];
		int i=0;
int main(int argc, char** argv) {
int x=0;
FILE *f;
do{
system("CLS");	
cout<<"MENU OPZIONI"<<endl;
cout<<"Premi 1 per fare un operazione di lettura"<<endl;
cout<<"Premi 2 per fare un operazione di scrittura"<<endl;
cout<<"Scelta: ";
	
cin>>x;
cout<<endl;

	if (x==1){

	
	
	f=fopen("file.txt","r");
	if(!fopen){
		cout<<"errore";
	} else{
	
	
	do{
	i=fread(ciao,1,100,f);
	ciao[i]=0;
	cout<<ciao;
	cout<<endl;
}while(i!=0);
}	
}else{
	
	cin.getline(ciao1,101);

	f=fopen("file.txt","w");
	if(!fopen){
		cout<<"errore";
	} else{
	i=fwrite(ciao1,1,strlen(ciao1),f);
	ciao1[i]=0;
	cout<<ciao1;

}
}


system("PAUSE");	
}while(true);

return 0;
}

11 Risposte

  • In scrittura questo

    ciao1=0;

    non serve e non ha senso

    If(fopen è sbagliato, devi controllare f con if(f

    Ma il problema che hai avuto non è chiaro. Spiega meglio cosa succede
  • oregon ha scritto:


    In scrittura questo

    ciao1=0;

    non serve e non ha senso

    If(fopen è sbagliato, devi controllare f con if(f

    Ma il problema che hai avuto non è chiaro. Spiega meglio cosa succede


    Il problema è che invece di farmi fare il cin e scrivere l input sul file mi termina direttamente nonostante ci sia un cin.getline :\
  • Svuota il buffer dopo l'input, scrivi

    cin >> x;
    cin.ignore();
  • oregon ha scritto:


    Svuota il buffer dopo l'input, scrivi

    cin >> x;
    cin.ignore();
    ok.. ora va ma non scrive nulla nel file
  • Devi chiudere il file
  • oregon ha scritto:


    Devi chiudere il file
    ho fatto cosi ma non va.
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    	char ciao[100];
    	char ciao1[100];
    		int i=0;
    int main(int argc, char** argv) {
    int x=0;
    FILE *f;
    do{
    system("CLS");	
    cout<<"MENU OPZIONI"<<endl;
    cout<<"Premi 1 per fare un operazione di lettura"<<endl;
    cout<<"Premi 2 per fare un operazione di scrittura"<<endl;
    cout<<"Scelta: ";
    	
    cin>>x;
    cout<<endl;
    
    	if (x==1){
    
    	
    	
    	f=fopen("file.txt","r");
    	if(!fopen){
    		cout<<"errore";
    		return 1;
    	} 
    	
    	
    	do{
    	i=fread(ciao,1,100,f);
    	ciao[i]=0;
    	cout<<ciao;
    	cout<<endl;
    		fclose(f);
    }while(i!=0);
    	
    }else{
    	
    	cin.getline(ciao1,101);
        cin.ignore();
    	f=fopen("file.txt","w");
    	if(!fopen){
    		cout<<"errore";
    	} else{
    	fwrite(&ciao1,strlen(ciao1),1,f);
    
    	cout<<ciao1;
    	fclose(f);
    
    }
    }
    
    
    system("PAUSE");	
    }while(true);
    
    return 0;
    }
  • Ma l'hai letto il mio post sul cin.ignore() ?

    Hai visto dove l'ho messo ?

    cin >> x;
    cin.ignore();
  • Ho messo cin al posto di cin.getline e va, grazie.. nella parte dell' fread il programma legge giustamente al più 100 caratteri. Come faccio a fargli leggere più caratteri con un ciclo while?
  • Dovresti usare le string del C++

    Guarda che le

    if(!fopen)

    sono sbagliate (è la seconda volta che te lo dico). Deve essere

    if(!f)
  • oregon ha scritto:


    Dovresti usare le string del C++

    Guarda che le

    if(!fopen)

    sono sbagliate (è la seconda volta che te lo dico). Deve essere

    if(!f)
    Ora non dovrebbero esserci errori.. Il mio prof ha detto che devo usare un while per leggere file lunghi, lo uso con le string?
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    	char ciao[100];
    	char ciao1[100];
    		int i=0;
    int main(int argc, char** argv) {
    int x=0;
    FILE *f;
    do{
    system("CLS");	
    cout<<"MENU OPZIONI"<<endl;
    cout<<"Premi 1 per fare un operazione di lettura"<<endl;
    cout<<"Premi 2 per fare un operazione di scrittura"<<endl;
    cout<<"Scelta: ";
    	
    cin>>x;
    cout<<endl;
    
    	if (x==1){
    
    	
    	
    	f=fopen("file.txt","r");
    	if(!f){
    		cout<<"errore";
    		return 1;
    	} 
    	
    	
    	do{
    	i=fread(ciao,1,100,f);
    	ciao[i]=0;
    	cout<<ciao;
    	cout<<endl;
    		fclose(f);
    }while(i!=0);
    	
    }else{
    	
    	cin>>ciao1;
        cin.ignore();
    	f=fopen("file.txt","w");
    	if(!f){
    		cout<<"errore";
    	} else{
    	fwrite(&ciao1,strlen(ciao1),1,f);
    
    	cout<<ciao1;
    	fclose(f);
    
    }
    }
    
    
    system("PAUSE");	
    }while(true);
    
    return 0;
    }
  • Stai mischiando C e C++ e la cosa può dare fastidio. La fread e fwrite in genere si utilizzano con dati binari e non con dati di testo.
    Se usi le string del C++, puoi usare la funzione getline e gli stream del C++
    
    			string line;
    			ifstream ifs("file.txt", ifstream::in);
    
    			while (getline(ifs, line))
    				cout << line << endl;
    
    			ifs.close();
    
Devi accedere o registrarti per scrivere nel forum
11 risposte