Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Binni
    Registrato dal
    Aug 2012
    Messaggi
    17

    [C] Scrittura su txt

    Ciao ragazzi, ho un problema con la scrittura su di un file.
    codice:
    void writeFile(FILE * fd,int * m)
    {
        int i=0;
        char a[20][20];
        char b[20][20];
        int c;
        fd = fopen("lol.txt","w");
        if (fd ==  NULL)
        {
            printf("Impossibile aprire file!");
            exit(1);
        }
        else
        {
            while ( i != 'n')
            {
                
                scanf("%s %s %d",&a,&b,&c);
                fprintf(fd,"%s %s %d\n",a,b,c);
                printf("Vuoi aggiungere un altro elemento?s/n");
                scanf("%c",&i);
                m+=1;
            }
        }
        fclose(fd);
    }
    Il primo rigo sul file viene scritto correttamente, nel secondo inserisce la "s" di condizione per continuare con il while..mi suggerite un metodo per risolvere questo problema?
    Grazie!
    Declare Variables, Not War

  2. #2
    C'è un errore di dichiarazione della variabile 'i'. Dovresti dichiararla di tipo char.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E poi devi pulire il buffer di input della tastiera subito dopo ogni scanf.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    C'è anche l'errore nella dichiarazione di "a" e "b":
    char a[20][20];
    char b[20][20];
    sono array di stringhe.
    Dovevi scrivere:
    char a[20];
    char b[20];
    o ancora più semplicemente:
    char a[20], b[20];

    e poi una scanf scritta così:
    scanf("%20s %20s %d", a, b, &c);

    per evitare buffer overflow.

    Ciao.

  5. #5
    Utente di HTML.it L'avatar di Binni
    Registrato dal
    Aug 2012
    Messaggi
    17
    Originariamente inviato da CyberCrasher
    C'è un errore di dichiarazione della variabile 'i'. Dovresti dichiararla di tipo char.
    Errore mio, avevo provato con un contatore ed avevo lasciato come intero


    Originariamente inviato da oregon
    E poi devi pulire il buffer di input della tastiera subito dopo ogni scanf.
    Con "fflush(stdin)" giusto??


    Originariamente inviato da c0der
    e poi una scanf scritta così:
    scanf("%20s %20s %d", a, b, &c);

    Ciao.
    Mi spiegheresti a che serve?
    Declare Variables, Not War

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Binni
    Con "fflush(stdin)" giusto??
    Oppure, meglio, con

    while(getchar ()!='\n')

    Mi spiegheresti a che serve?
    A limitare il numero di caratteri inseriti nelle stringhe per evitare di andare oltre la loro dimensione.

    Ma ti consiglio di studiarle queste cose ... leggi questo

    http://www.cplusplus.com/reference/c.../cstdio/scanf/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di Binni
    Registrato dal
    Aug 2012
    Messaggi
    17
    Grazie mille ragazzi!
    Declare Variables, Not War

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In realtà dovresti scrivere

    scanf("%19s %19s %d", a, b, &c);

    dato che si deve considerare il terminatore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Originariamente inviato da oregon
    In realtà dovresti scrivere

    scanf("%19s %19s %d", a, b, &c);

    dato che si deve considerare il terminatore.
    Assolutamente sì, vero, dimenticanza mia. Ciao.

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.