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 '...'