Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Inserire dati su un file / Lettura di un file

    Salve a tutti. Ho scritto un semplice programma che permette l'inserimento di 4 tipi di dati su un file:
    1) Username
    2) Password
    3) Email
    4) Età
    Il problema funziona, ma se inserisco un username con lo spazio (es. "Goat Boy"), mi salta direttamente ad Email, senza farmi dare la password. Come mai?
    Questo è il codice che ho scritto:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define USER_FILE "user.txt"
    
    typedef struct{
            char user[30];
            char pass[30];
            char email[50];
            int age;
    } user; 
    
    int main(void){
        FILE *fp;
        user u;
        if (!(fp=fopen(USER_FILE,"a"))){
                                        printf("Errore\n");
                                        exit(1);                                
        }
        printf ("Inseririmento di un nuovo utente: \n\n");
        printf ("Username: ");
        scanf ("%s",u.user);
        printf ("Password: ");
        scanf ("%s",u.pass);
        printf ("Email: ");
        scanf ("%s",u.email);
        printf ("Età: ");
        scanf ("%d",&u.age);
        
        /* Scrivo i dati sul file */ 
        fprintf(fp, "%s\t%s\t%s\t%d\n", u.user, u.pass, u.email, u.age);
        printf("Dati scritti con successo\n");
        fclose(fp);
    }
    Inoltre vorrei sapere una cosa sulla lettura dei file. Ieri ho creato un file .txt con scritti dei numeri, e poi ho creato un programma che mi leggeva ciò che era scritto sul file. Vorrei sapere come mai non mi da i numeri sullo schermo, forse devo scriverli in modo particolare sul file .txt? O ho sbagliato il codice (cosa molto probabile)?
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define MIO_FILE "prova.txt"
    
    int main(void){
        FILE *fp;
        fp=fopen(MIO_FILE, "r");    
        int fclose(FILE *fp);
    }
    Ringrazio già da ora per la vostra disponibilità

  2. #2
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Nessuno sa darmi una mano, io ho provato a cercare su qualche guida, ma non sono riuscito a trovare una soluzione al problema..

  3. #3
    In teoria si potrebbe risolvere il problema, ma usare scanf() è estremamente pericoloso (vedi buffer overflow & co).
    Quindi è meglio usare altre funzioni come fgets().

    Per quanto riguarda il secondo problema devi usare atoi()
    http://www.cplusplus.com/reference/c.../cstdlib/atoi/

  4. #4
    la scanf %s funziona così:
    String of characters. This will read subsequent characters until a whitespace is found (whitespace characters are considered to be blank, newline and tab).
    per cui si ferma appena trova anche un carattere di spaziatura
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da clynamen
    In teoria si potrebbe risolvere il problema, ma usare scanf() è estremamente pericoloso (vedi buffer overflow & co).
    Quindi è meglio usare altre funzioni come fgets().
    Non riesco a capire come funziona la fgets, puoi farmi un esempio?

  6. #6
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da Celebron
    la scanf %s si ferma appena trova anche un carattere di spaziatura
    Non lo sapevo, di sicuro non lo dimentico più

  7. #7
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Come dovrei modificare il codice che ho? Al posto di scanf devo inserire fgets , ma che parametri devo dare alla fgets?
    Io ho trovato :
    codice:
    char *fgets(char *s, int size, FILE *stream);
    Ma non sò a cosa si riferiscono int size e FILE *stream..

  8. #8
    Originariamente inviato da goatboy
    Come dovrei modificare il codice che ho? Al posto di scanf devo inserire fgets , ma che parametri devo dare alla fgets?
    Io ho trovato :
    codice:
    char *fgets(char *s, int size, FILE *stream);
    Ma non sò a cosa si riferiscono int size e FILE *stream..

    ecco:
    arameters
    str
    Pointer to an array of chars where the string read is stored.
    num
    Maximum number of characters to be read (including the final null-character). Usually, the length of the array passed as str is used.
    stream
    Pointer to a FILE object that identifies the stream where characters are read from.
    To read from the standard input, stdin can be used for this parameter.
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  9. #9
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Ho sostituito alla scanf dell'username, la fgets, ma mi da errore:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define USER_FILE "user.txt"
    
    typedef struct{
            char user[30];
            char pass[30];
            char email[50];
            int age;
    } user; 
    
    int main(void){
        FILE *fp;
        user u;
        if (!(fp=fopen(USER_FILE,"a"))){
                                        printf("Errore\n");
                                        exit(1);                                
        }
        printf ("Inseririmento di un nuovo utente: \n\n");
        printf ("Username: ");
        fgets(user,sizeof(user),*fp);
        printf ("Password: ");
        scanf ("%s",u.pass);
        printf ("Email: ");
        scanf ("%s",u.email);
        printf ("Eta': ");
        scanf ("%d",&u.age);
        
        /* Scrivo i dati sul file */ 
        fprintf(fp, "%s\t%s\t%s\t%d\n", u.user, u.pass, u.email, u.age);
        printf("Dati scritti con successo.\n");
        fclose(fp);
    }
    Dov'è che sbaglio?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da goatboy

    Dov'è che sbaglio?
    Ti era già stato suggerito

    "To read from the standard input, stdin can be used for this parameter"
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.