Newsgroup: it.comp.programmare
Titolo: programma x criptare

Ciao non riesco a capire come mai nn funziona
qualcuno mi può dire dove è l'errore?
Dovrebbe essere un programma che cripta o decripta una frase in base a una
chiave numerica inserita da tastiera
Eccolo qua:
#include <iostream.h>
#include <string.h>
//Crypta e decripta i messaggi
void main ()
{
     char operazione;  //c=Criptare  d=Decriptare
     char carattere; //carattere da modificare/modificato
     char frase[500]; //frase inserita
     char frasecrypt[500]; //frase cryptata
     int chiave,lungh,numcaratterecrypt;
     int cont=0; //posizione lettera da prendere
     do
         {
          cout<<"Cosa vuoi fare?(Cryptare='c'-DeCryptare='d')"<<endl;
          cin>>operazione;
          if ((operazione!='c')&&(operazione!='d')) cout<<"Attenzione! Devi
inserire 'c' o 'd'!"<<endl;
         }    while ((operazione!='c')&&(operazione!='d'));
     cout<<"Inserisci la frase o la parola da ";
     if (operazione=='c')  cout<<"cryptare: "<<endl;
     else cout<<"decryptare: "<<endl;
     cin >>frase;
     cout<<"Inserisci la chiave di ";
     if (operazione=='c')  cout<<"cryptazione(un intero minore di 256):
"<<endl;
    else cout<<"decryptazione(un intero minore di 256): "<<endl;
    do
    {
        cin>>chiave;
        if (chiave==256) cout<<"Il numero deve essere diverso da
256"<<endl<<"Reinseriscilo"<<endl;
     }    while (chiave==256);
***lungh=strlen(frase);
     if (operazione=='c')
    {
         for (;cont<lungh;cont++)
        {
             carattere=frase[cont];
             numcaratterecrypt=(int)carattere +chiave;
             carattere=(char)numcaratterecrypt;
             strcat (frasecrypt,carattere);
         }
         cout <<"La frase cryptata è la seguente:"<<endl<<endl;
     }
     if (operazione!='c')
     {
          for (;cont<lungh;cont++)
         {
             carattere=frase[cont];
             numcaratterecrypt=carattere-chiave;
             carattere=(char)numcaratterecrypt;
***       strcat (frasecrypt,carattere);
          }
         cout <<"La frase decryptata è la seguente:"<<endl<<endl;
     }
     cout <<frasecrypt<<endl<<endl;
}
SE LO COMPILO MI DA I SEGUENTI ERRORI:
+ Alle linee in cui ho messo 3 asterischi mi dice:
Cannot convert 'int' to 'const char*'
Type mismatch in parameter '__src' in call to 'strcat(char*,const char*)'
Grazie a chi mi risponderà
Ciao
---------------
Genovesi Gianni
---------------

Genovesi Gianni ha scritto:

Premesso che gestire l'interfaccia utente all'interno del programma e' 
una cosa da evitare assolutamente: molto meglio prevedere tutti i 
parametri da linea di comando e restituire dei codici di errore, senza 
perdere tempo dietro ad amenita' quali l'input interattivo e i messaggi 
di errore, cio' premesso, veniamo al punto:
 > ***lungh=strlen(frase);
qui dici che ti risponde "cannot convert int to const char *" e qui sono 
piuttosto perplesso:
lung e' dichiarata come int
frase e' dichiarata come char[]
e il prototipo della funzione in string.h e'
	size_t strlen(const char *);
sicuro che sia un errore o non invece un warning?
mentre l'altro
 > ***       strcat (frasecrypt,carattere);
e' chiaro perche' da' errore:
frasecrypt e' un char[] mentre carattere e' un semplice char
e il prototipo della funzione e'
	char *strcat(char *, const char *);
infine, questo algoritmo di criptazione se ho ben capito si limiterebbe 
ad aggiungere una costante ad ogni carattere della stringa.
Direi che come sicurezza siamo grossomodo sottozero.
Ad ogni modo, comincia con lo scrivere una funzione di questo tipo:
	char *cripta(char *frase_da_criptare, int key);
e poi richiamala a piu' alto livello dal main().
E soprattutto gestisci il passaggio di parametri da riga di comando, 
prevedendo l'input diretto o dallo stdin.
Supponi di dover criptare un intero file...

 a una chiave numerica inserita da tastiera
Ci sono decine di errori. Il più problematico lo ha già segnalato il 
compilatore, non puoi fare strcat con un carattere. Puoi però usare strncat, 
quindi
strncat (frasecrypt,&carattere,1);
Il vero problema è che se vuoi programmare in C++ devi studiare meglio il 
funzionamento degli I/O streams. Ma visto che usi le stringhe C, cioè degli 
array di caratter non sarebbe meglio lavorare direttamente in C? Altrimenti 
usa le string che ti semplificano la vita e hanno gli operatori di 
concatenamento.
-- 
Costantino Grana