Uso Struct assieme ai File Criptati

di il
12 risposte

Uso Struct assieme ai File Criptati

Ciao a tutti, sono nuovo e stavo cercando un forum per il C.. Trovato!

Ho il seguente problema, sto facendo due programmi che usano i File, solo che non ho una competenza altissima sull'uso delle stringhe e puntatori, perchè il nostro professore ci legge le fotocopie e non spiega niente!

Il 1 problema è il seguente: Devo creare una password random ed inserirla dentro un file, e fin qui ci riesco, però se ne inserisco un altra me la crea subito dopo non distinguendole più l'una dall'altra, poi una volta creata una o più pass e messe nel file vorrei riuscire a prenderle dal file e farle leggere a video... L'idea iniziale è con la criptazione in modo che leggendo il file nessuno sappia cosa ci sia scritto, ma prima devo risolvere questo problema di scrittura e lettura!!!
Vi copio il Source cose potete vedere:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
  
void wait(int seconds) //Function for wait a determinate seconds
{
     time_t now, start;
     start = now = time (NULL);
     while(now < (start + seconds) ) 
         now = time (NULL);
     return;
}
  
int main ()
{
    FILE *pFile;
    char choice = ' ';
    char word [73] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
                    'p','q','r','s','t','u','v','w','x','y','z','1','2','3','4',
                    '5','6','7','8','9','0','A','B','C','D','E','F','G','H','I',
                    'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X',
                    'Y','Z','0','1','2','3','4','5','6','7','8','9'};
    char password[37];
    int i, random = 0, len = 0, choose = -1;
    srand((unsigned)time(NULL));
    //mando il programma in ciclo fino a che l'utente non decide di smettere di generare password 
    //(rispondendo alla domanda "Do you randomize an other pasword?" con il carattere 'n' oppure 'N')
    
        while (choose != 0)
    {
        printf("******************************\n");  // 30 asterischi
        printf("*                            *\n");
        printf("*   DATABASE YOUR PASSWORD   *\n");
        printf("*                            *\n");
        printf("*      Choose an option:     *\n");
        printf("*                            *\n");
        printf("*   1. Create a new simple   *\n");
        printf("*      Password (Len 1-36)   *\n");
        printf("*                            *\n");
        printf("*   2. Show all your Pass    *\n");
        printf("*                            *\n");
        printf("*   0. Exit                  *\n");
        printf("*                            *\n");
        printf("******************************\n");
        scanf("%d", &choose);
        
        
        if (choose == 0)
        {
           printf("\nProgrammed by Triko, thanks for choosing me!!!");
           wait (2); //Imposta il tempo di chiusura dopo aver premuto 0. Default 2!
        }
        
        if (choose == 1)
        {  
           //pulisco lo schermo
           system("CLS");
           
           //resetto la variabile password (nel caso fosse un secondo ciclo e quindi ci sia ancora in memoria quella precedente
           for (i = 0; i < 37; i++)
               password[i]=' ';
           
           //chiedo all'utente quando di che lunghezza vuole la password
           printf("Insert length of your password (Max length 36): ");
           scanf("%d", &len);
           printf("\n\n");
           printf("Password generata: ");
           
           //generate Password
           for (i = 0; i < len; i++)
           {
               random = rand() % 62 + 1;
               password[i] = word[random];
           }
           
           //Show Password
           for (i = 0; i < len; i++)
               printf("%c", password[i]);
           printf("\n\n");
           
           //Insert Password in File
           
           //Put in file the password
           pFile = fopen ("password.txt", "a");
           
           if ( !feof (pFile) )  //Qui li mette in ordine
           {
           for(i = 0; i < len; i++)
               fprintf(pFile, "%c", password[i]);  
           }
               
           fclose(pFile);
}
}
}
Grazie a tutti in anticipo per l'aiuto!!!!

12 Risposte

  • Re: Uso Struct assieme ai File Criptati

    Aggiugni un fine riga.
    
    if ( !feof (pFile) )  //Qui li mette in ordine
    {
        for(i = 0; i < len; i++)
             fprintf(pFile, "%c", password[i]); 
         fprintf(pFile, "\n"); 
    }
    Dopo li leggi riga x riga
  • Re: Uso Struct assieme ai File Criptati

    Ma dove devo aggiungerlo il fine riga? Intendi EOL giusto?
    Sulla scelta 2 ci mette un
    
    if (choose==2)
    {
       char foo [50];
       pFile = fopen ("file.txt", "a");
       //Ora faccio un ciclo iterato perchè non conosco la lunghezza del file
       while (!feof(pFile)
       {
          fscanf(pFile, "%s", &foo); 
          printf ("%s", foo);
          if (feol (pFile)
          {
               //Come faccio a dirgli di prendere i valori che sono a capo??? :D
          }
       }
    }
    
    Come ho commentato nel code: Come si fa a fargli stampare i valori a capo?
  • Re: Uso Struct assieme ai File Criptati

    Perche ti serve l'if? con scanf hai già preso la parola. Togli solo l'& perche foo è già un puntatore.
  • Re: Uso Struct assieme ai File Criptati

    An ok, però se provo ad eseguirlo mi entra in un ciclo infinito!!! Come mai?

    ho tolto la &, e l'if, ed ho messo while !feof(pFile)
    però è come se non trovasse la fine del file!!!
  • Re: Uso Struct assieme ai File Criptati

    pFile = fopen ("file.txt", "a");
    Perche append in reading?
  • Re: Uso Struct assieme ai File Criptati

    Giusto , ok ora inserisco la pass e mi esce quando vado a stampare: p un simbolo strano ed una parentesi [ ???
  • Re: Uso Struct assieme ai File Criptati

    Non posso aiutarti oltre se non ti aiuti da solo imparando ad eseguire il debug. Posta cmq l'aggiornamento del codice. Per il debug puoi leggere il post in evidenza (vale per Visual C++ ma il concetto è lo stesso).
  • Re: Uso Struct assieme ai File Criptati

    Codice aggiornato
    
            else if (choose == 2)
            {
                 char a = ' ';
                 char foo [50];
                 for (i = 0; i < 50; i++)
                     foo[i] = a;
                 pFile = fopen ("file.txt", "r");
                 //Ora faccio un ciclo iterato perchè non conosco la lunghezza del file
                 while (!feof (pFile))
                 {
                       fscanf(pFile, "%s", foo);
                       printf ("%s", foo);
                 }
                 printf("\n\n");
                 fclose(pFile);       
            }
    
    Sto provando di tutto, ho anche messo tutta la char piena di spazi e quando stampo mi esce una faccina al posto della pass, ho provato anche senza e mi esce sempre la maledetta: p;
    Il problema è che non l'ho mai fatto e non saprei come trattare!!! Sto provando
  • Re: Uso Struct assieme ai File Criptati

    Non ne ho idea!
    Mi tocca arrendermi le ho provate tutte!
    Proprio vietato aiutare sul forum?
  • Re: Uso Struct assieme ai File Criptati

    fprintf(pFile, "%c", password[i]);  
    cambia
    fprintf(pFile, "%c", &password[i]);  
    Poi non siamo dei vegenti e non abbiamo davanti il tuo pc e i tuoi file. Quindi si fa quel che si può.
  • Re: Uso Struct assieme ai File Criptati

    Non volevo essere offensivo, pensavo sapessi la rx e mi volessi spronare
    Comunque provato anche mettendo il puntatore e non va
    Proverò in qualche modo con un programmino piccolissimo e vedere se funziona poi lo esporto qui!
    GRAZIE MILLE SKYNET
  • Re: Uso Struct assieme ai File Criptati

    Figurati ma siccome lavori su file l'unico modo é col debug. A vista si trovano solo errori grossolani.
Devi accedere o registrarti per scrivere nel forum
12 risposte