Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] Programma ignora funzione gets()

    Come mai il programma ignora la funzione gets(lo fa solo al momento di inserire il comune: non richiede l'input dall'utente e quando deve stamparlo non lo stampa)?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define FILE_COMUNI  "codicicatastali.txt"
    
    int main(int argc, char *argv[])
    {
      char nome[20],cognome[20],data[7],nome_comune[60];
      char sesso;
      
      printf("Inserire:\nNome:\nCognome:\nData di nascita in formato GG/MM/AA:\nSesso(m or f):\nComune di nascita:");
      
      gotoxy(6,2);gets(nome);
      gotoxy(9,3);gets(cognome);
      gotoxy(37,4);gets(data);
      gotoxy(15,5);scanf("%c",&sesso);       
      gotoxy(19,6);gets(nome_comune);gotoxy(1,7);
      
      printf("Verifica dati inseriti:\n");
      printf("Nome:%s\nCognome:%s\nData:%s\nSesso:%c\nComune:%s",nome,cognome,data,sesso,nome_comune);
      
      system("PAUSE");	
      return 0;
    }

  2. #2
    hai controllato cosa è presente in nome_comune con il debugger?
    dovrebbe esserci un \n, dovuto al fatto che non svuoti il buffer in input dopo l'uso della scanf

    metti un semplice getchar() dopo di essa e dovresti essere apposto

  3. #3
    Il problema era esattamente quello...Adesso funziona alla perfezione... Grazie 1000...

  4. #4
    E'sorto un altro problema: adesso ignora l'inserimento di cognome(anche se inserisco un cognome, non me lo mette nella stringa)...

  5. #5
    Originariamente inviato da matteever
    E'sorto un altro problema: adesso ignora l'inserimento di cognome(anche se inserisco un cognome, non me lo mette nella stringa)...
    Quando si ha l'inserimento da input di caratteri bisogna sempre prestare attenzione al fatto che, quando l'utente preme INVIO (CR LF) dopo l'inserimento, nel buffer rimane LF e quindi se si va a leggere ancora da input dei caratteri, questo viene considerato come carattere inserito e quindi a te sembra che venga "saltata" la successiva lettura...
    Per rimediare, quando hai la lettura di caratteri da input, sia che utilizzi la scanf sia che utilizzi altro, subito dopo inserisci un

    codice:
    getchar ();
    o, più sicuro:

    codice:
    while (getchar () != 10);
    EDIT: in ogni caso non avevo letto bene il problema e forse non ho capito bene: puoi spiegare meglio quale problema riscontri?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  6. #6
    Il problema è quello che hai descritto tu: richiede di inserire una stringa, io inserisco il cognome, ma quando deve restituire i dati, il cognome lo lascia vuoto. Non ho capito esattamente dove inserire i getchar()...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define FILE_COMUNI  "codicicatastali.txt"
    
    int main(int argc, char *argv[])
    {
      FILE *fp;
      char nome[20],cognome[20],data[8],codice[20],conscogn[20],consnom[20],vocnom[20],voccogn[20],mese[5],giorno[5],anno[5],nome_comune[60],codice_comune[4];
      char sesso;
      
      
      printf("Inserire:\nNome:\nCognome:\nData di nascita in formato GG/MM/AA:\nSesso(m or f):\nComune di nascita:");
      
      gotoxy(6,2);gets(nome);
      gotoxy(9,3);gets(cognome);
      gotoxy(37,4);gets(data);
      gotoxy(15,5);scanf("%c",&sesso); getchar();      
      gotoxy(19,6);gets(nome_comune);gotoxy(1,7);
      
      printf("Verifica dati inseriti:\n");
      printf("Nome:%s\nCognome:%s\nData:%s\nSesso:%c\nComune:%s",nome,cognome,data,sesso,nome_comune);
      
      system("PAUSE");	
      return 0;
    }

  7. #7
    Prova a mettere la getchar () dopo la gets(nome); poi prova a fare singole stampe per ogni inserimento per vedere i vari passi del programma!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  8. #8
    Ho capito dove sta il problema ma non so come toglierlo (non funziona mettendo getchar() dopo nome): il gets() immagazzina l'input normalmente, ma ignora il primo carattere inserito e ci mette '\0'...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.