Domanda problema scrittura su file c++

Stato
Discussione chiusa ad ulteriori risposte.

agadir92

Utente Silver
26 Ottobre 2008
66
13
0
73
ecco il mio source:
Codice:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <string>
using namespace std;
#define a "c:\\libreria.txt"
void proc ();
main()
{   int s;
    do{
    cout<<"1.inserisci"<<endl;
    cout<<"2.esci"<<endl;
    cin>>s;
     proc (); 
      }while(s!=2);
return 0;
}
void proc()
{
string titolo;
string autore;
float prezzo;   
cout<<"Inserisci titolo:";
cin>>titolo;
cout<<"Inserisci autore:";
cin>>autore;
cout<<"Inserisci prezzo:";
cin>>prezzo;  
FILE *f;
f=fopen(a,"a");
fprintf(f,"%s\n",titolo);
fprintf(f,"%s\n",autore);
fprintf(f,"%f\n",prezzo);
fclose(f);     
cout<<"scrittura eseguita!\n";
}
il problema sta nelle stringhe, coi numeri va tutto bene appena uso le stringhe va a cagare e non capisco il perchè...

l'errore è il seguente:
riga 31: [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime
non capisco k ****** dice sto compilatore cesso
help me :)
 
Ultima modifica:
ma perchè ti ostini a usare la sintassi del C? usa C++ XD

io userei:

Codice:
#include <iostream.h>
#include <stdio.h>
#include <cstdio>


int main()
{
FILE* file;
file = fopen ("nome.estensione", "w");
if(!file)return 1;
else
{
fputs("ciao", file);
char* stringa = "come stai?";
fputs(stringa, file);
}
fclose(file);
}

Approposito!!!! anzichè usare i tipi string usa i puntatori a char.
 
stephx uso la sintassi del c perchè a scuola usiamo la sintassi del c, cmq adesso vedo di risolvere se qualcuno sa perchè mi da errore sulle stringhe lo posti grz
nikothetiger so che potrei usare dei char però so che si può fare con le stringhe quindi...
 
stephx uso la sintassi del c perchè a scuola usiamo la sintassi del c, cmq adesso vedo di risolvere se qualcuno sa perchè mi da errore sulle stringhe lo posti grz
nikothetiger so che potrei usare dei char però so che si può fare con le stringhe quindi...

eh ma nel tuo caso la funzione che usi accetta di norma i const char*... Poi se vuoi usare i tipi std::string lo puoi fare sicuramente.... ma non ti conviene moltissimo xD

http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/
 
Meglio usare i puntatori a char...
E comunque non ascoltare tutto quello che ti dicono i professori... non sto offendendo nessuno, ma non limitarti a fare "quello che fate a scuola"... scaricati qualche buon manuale dal nostro amico Internet, e portati un pochino avanti con il lavoro. Fidati, è utile ;)
 
Ultima modifica:
e se volessi utilizzare le stringhe come è nel codice dove sta l errore?
edit:lo fatto coi char e funziona perfettamente, solo che ho riscontrato un bug, se uso degli spazi tra le parole tipo "divina commedia" il programma mi va in tilt a differenza di "divinacommedia" come posso risolvere il problema per gli spazi tra le varie parole (nel char e possibilmente anche nelle stringhe)
grz
 
gestione file

Codice:
void leggi_file()
{
  int i = 0;
  FILE *fp;
  char stringa[50];
  char temp[50];
  char risp;
  memset(stringa,'\0',sizeof(stringa));
  fp = fopen("c:\\test\\prova.txt","r");
  do
  {

	fread(stringa+i,2,4,fp);
	temp[i] = stringa[i];
	if (stringa[i] == ';')
	{
	  stringa[i] = '\0';
	}
	i++;
	
	
  }while(stringa[i] != ';');
  cout<<stringa<<endl<<endl;
  
  system("pause");
}


void scrivi_file()
{
  int i;
  FILE *fp;
  char stringa[50];
  memset(stringa,'\0',sizeof(stringa));
  fp = fopen("c:\\test\\prova3.txt","a");
  cout<<"Inserire il testo da scrivere nel file inserendo ; per terminare\n";
  cin>>stringa;
  do
  {
    
    fputc(stringa[i],fp);
	if (stringa[i] == ';')
	{
	  stringa[i] = '\0';
	}
	i++;
  }while(stringa[i] != ';');

}

Fatti personalmente da me dovrebbero funzionare anche perchè da me funzionano in ogni caso ti consiglio di usare char o array di char ma mai string ciaoooooo
 
gestione file

Codice:
void leggi_file()
{
  int i = 0;
  FILE *fp;
  char stringa[50];
  char temp[50];
  char risp;
  memset(stringa,'\0',sizeof(stringa));
  fp = fopen("c:\\test\\prova.txt","r");
  do
  {

	fread(stringa+i,2,4,fp);
	temp[i] = stringa[i];
	if (stringa[i] == ';')
	{
	  stringa[i] = '\0';
	}
	i++;
	
	
  }while(stringa[i] != ';');
  cout<<stringa<<endl<<endl;
  
  system("pause");
}


void scrivi_file()
{
  int i;
  FILE *fp;
  char stringa[50];
  memset(stringa,'\0',sizeof(stringa));
  fp = fopen("c:\\test\\prova3.txt","a");
  cout<<"Inserire il testo da scrivere nel file inserendo ; per terminare\n";
  cin>>stringa;
  do
  {
    
    fputc(stringa[i],fp);
	if (stringa[i] == ';')
	{
	  stringa[i] = '\0';
	}
	i++;
  }while(stringa[i] != ';');

}
Fatti personalmente da me dovrebbero funzionare anche perchè da me funzionano in ogni caso ti consiglio di usare char o array di char ma mai string ciaoooooo

P.s scusate il doppio post ma non avevo chiuso il code :D
 
Stato
Discussione chiusa ad ulteriori risposte.