[C++] problema copia stringa su file

di il
34 risposte

34 Risposte - Pagina 2

  • Re: [C++] problema copia stringa su file

    Secondo me le string del C++ sono più semplici da utilizzare rispetto a quelle del C.

    Anche perché penso che tu non abbia nemmeno presente come funzionino quelle del C ...
  • Re: [C++] problema copia stringa su file

  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Secondo me le string del C++ sono più semplici da utilizzare rispetto a quelle del C.

    Anche perché penso che tu non abbia nemmeno presente come funzionino quelle del C ...
    hai ragione, però sono autodidatta e sto imparando piano piano...fino ad ora ho fatto esercizi con le strighe del C e su quelle del C++ ne so ancora meno...Potresti leggere la risposta che ho dato a Çlÿkÿ~?
    Comunque ti ringrazio per il tempo che stai perdendo ad aiutarmi.
  • Re: [C++] problema copia stringa su file

    Ma il file come l'hai aperto ? Con la fopen ?
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Ma il file come l'hai aperto ? Con la fopen ?
    si con la fopen
  • Re: [C++] problema copia stringa su file

    Scusa ... a questo punto riproponi TUTTO il codice che stai usando adesso ...
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Scusa ... a questo punto riproponi TUTTO il codice che stai usando adesso ...
    
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    #include <ostream>
    
    #include <string>
    
    using namespace std;
    
    char oper(char a, bool op);
    string ccript(string input, bool op);
    
    
    int main() 
    {
        int i=0;
        string s;
        char NomeFile[15];
        int  n;
        string messaggio; //messaggio che si inserisce
        string messaggiou; //messaggio da leggere
        string msgcry;
    
       
       FILE *pf ;
    
    
        cout<<"-Attenzione: in questo programma non possono essere usate lettere accentate o simili e/o maiuscole\n"
            <<"-Per avere una maggiore sicurezza del programma sconsiglio l'uso di lettere doppie\n\n"
        	<<"1) Cripta\n"
        	<<"2) Decripta\n"
         	<<"Esci con qualsiasi altro numero\n";
        cin>>i;
        
        fflush(stdin);
        switch(i) {
            case 1:
               cout<<"Hai scelto 1 --> criptare\n";
                cout << "\ncome vuoi chiamare il file? aggiungi il .txt alla fine: " ;
             cin >> NomeFile;
             pf = fopen ( NomeFile , "w" ) ; 
             if (pf) 
                { 
                   cout << "Inserisci testo : " ; 
                   fflush(stdin);
                   gets (messaggio); 
                   fprintf (pf, "%s\t", messaggio);                                     //fino a qui stampa nel file il messaggio che inseriamo
                } 
             else 
                cout << " Errore durante l’ apertura del file."  ;
                fclose (pf) ;
                
                
               // cout<<"Stringa criptata: "<<ccript(messaggio, true)<<endl;        //stampo nel prompt la stringa criptata ma non la salva nel vettore
             msgcry =  ccript(messaggio, true);
             cout << "Stringa criptata: " << msgcry << endl; 
             fprintf (pf, "%s\t", msgcry);
                
            
          break;
                
            
         /*   case 2:
            	cout<<"Hai scelto 2 --> decriptare\n";
                cout<<"Inserisci la stringa: ";
                getline(cin, s);
                cout<<"Stringa decriptata: "<<ccript(s, false)<<endl;
                break;
            */
       //     default:
                break;
        }
        getchar();
        return 0;
    }
    
    char oper(char a, bool op) 
    {
        if(op)
            return a + 3;
        else
            return a - 3;
    }
    
    string ccript(string input, bool op) 
    {
        string n="";
    
        for(unsigned int i=0;i<input.length();i++)
            if(input[i] >= 65 && input[i] <= 90)
                n+= (oper(input[i], op) > 90) ? (64 + oper(input[i], op) %90) : oper(input[i], op);
            else if(input[i] >= 97 && input[i] <= 122)
                    if ( oper(input[i], op) > 122 )
       					 n += 96 + oper(input[i], op) % 122;
    else
        n += oper(input[i], op);
            else
                n+= input[i];
    
        return n;
    }
    
    Puoi pure insultarmi in caso di errori stupidi
  • Re: [C++] problema copia stringa su file

    Ma scusa ... usi ancora le string del C++ ?

    Non avevi detto di voler usare le stringhe del C?

    Così non finiamo mai il thread ...
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Ma scusa ... usi ancora le string del C++ ?

    Non avevi detto di voler usare le stringhe del C?

    Così non finiamo mai il thread ...
    scusa, dopo il tuo messaggio ho deciso di usare quelle del C++
  • Re: [C++] problema copia stringa su file



    Comunque ... il problema è la gets ... devi scrivere

    getline(cin, messaggio);
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:




    Comunque ... il problema è la gets ... devi scrivere

    getline(cin, messaggio);
    Un errore in meno
    Però continua a darmi errore sulle fprintf
  • Re: [C++] problema copia stringa su file

    No ... non ne dà ... almeno il codice che mi hai mostrato.
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    No ... non ne dà ... almeno il codice che mi hai mostrato.
    
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    #include <ostream>
    #include <windows.h> 	//beep
    #include <string>		//stringhe C++
    
    using namespace std;
    
    char oper(char a, bool op);
    string ccript(string input, bool op);
    
    
    int main() 
    {
        int i=0;
        string s;
        char NomeFile[15];
        string messaggio; 			//messaggio che si inserisce
        string messaggiou; 			//messaggio da leggere
        string msgcry;				//messaggio che si inserisce criptato
        
    	Beep(523,500); 				// 523 hertz (C5) for 500 milliseconds     
    
       
       FILE *pf ;
    
    
        cout<<"-Attenzione: in questo programma non possono essere usate lettere accentate o simili e/o maiuscole\n"
            <<"-Per avere una maggiore sicurezza del programma sconsiglio l'uso di lettere doppie\n\n"
        	<<"1) Cripta\n"
        	<<"2) Decripta\n"
         	<<"Esci con qualsiasi altro numero\n";
        cin>>i;
        
        fflush(stdin);
        switch(i) 
    	{
            case 1:
            	cout<<"Hai scelto 1 --> criptare\n";
            	cout << "\ncome vuoi chiamare il file? aggiungi il .txt alla fine: " ;
             	cin >> NomeFile;
             	pf = fopen ( NomeFile , "w" ) ; 
             	if (pf) 
                	{ 
    	               cout << "Inserisci testo : " ; 
    	               fflush(stdin);
    	               getline(cin, messaggio);
    	               fprintf (pf, "%s\t", messaggio);                                     //fino a qui stampa nel file il messaggio che inseriamo
                	} 
             	else 
                	cout << " Errore durante l’ apertura del file."  ;
                
                
                
                // cout<<"Stringa criptata: "<<ccript(messaggio, true)<<endl;        //stampo nel prompt la stringa criptata ma non la salva nel vettore
            	msgcry =  ccript(messaggio, true);
            	cout << "Stringa criptata: " << msgcry << endl; 
            	fprintf (pf, "%s\t", msgcry);
                
            	fclose (pf) ;
          		break;
                
            
         /* case 2:
            	cout<<"Hai scelto 2 --> decriptare\n";
                cout<<"Inserisci la stringa: ";
                getline(cin, s);
                cout<<"Stringa decriptata: "<<ccript(s, false)<<endl;
                break;
            */
       //    default:
                break;
        }
        getchar();
        return 0;
    }
    
    char oper(char a, bool op) 
    {
        if(op)
            return a + 3;
        else
            return a - 3;
    }
    
    string ccript(string input, bool op) 
    {
        string n="";
    
        for(unsigned int i=0;i<input.length();i++)
            if(input[i] >= 65 && input[i] <= 90)
                n+= (oper(input[i], op) > 90) ? (64 + oper(input[i], op) %90) : oper(input[i], op);
            else if(input[i] >= 97 && input[i] <= 122)
                    if ( oper(input[i], op) > 122 )
       					 n += 96 + oper(input[i], op) % 122;
    else
        n += oper(input[i], op);
            else
                n+= input[i];
    
        return n;
    }
    
    questo codice (è lo stesso di prima solo che ho aggiunto il beep e tolto cose inutili) mi da questo errore sulle fprintf:
    [Error] cannot pass objects of non-trivially-copyable type 'std::string {aka class std::basic_string<char>}' through '...'
  • Re: [C++] problema copia stringa su file

    Prova nella fprintf a scrivere

    messaggio.c_str()
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Prova nella fprintf a scrivere

    messaggio.c_str()
    Grazie mille, ora funziona...Potresti spiegarmi il motivo per cui hai aggiunto ".c_str()" ?
    Volevo capire anche in getline (cin, messaggio), a cosa serve cin .
Devi accedere o registrarti per scrivere nel forum
34 risposte