Fread fwrite

di il
11 risposte

Fread fwrite

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

  • Re: Fread fwrite

    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
  • Re: Fread fwrite

    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 :\
  • Re: Fread fwrite

    Svuota il buffer dopo l'input, scrivi

    cin >> x;
    cin.ignore();
  • Re: Fread fwrite

    oregon ha scritto:


    Svuota il buffer dopo l'input, scrivi

    cin >> x;
    cin.ignore();
    ok.. ora va ma non scrive nulla nel file
  • Re: Fread fwrite

    Devi chiudere il file
  • Re: Fread fwrite

    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;
    }
  • Re: Fread fwrite

    Ma l'hai letto il mio post sul cin.ignore() ?

    Hai visto dove l'ho messo ?

    cin >> x;
    cin.ignore();
  • Re: Fread fwrite

    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?
  • Re: Fread fwrite

    Dovresti usare le string del C++

    Guarda che le

    if(!fopen)

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

    if(!f)
  • Re: Fread fwrite

    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;
    }
  • Re: Fread fwrite

    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