PDA

Visualizza la versione completa : [C] Programma ignora funzione gets()


matteever
25-02-2011, 17:59
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)?



#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;
}

Celebron
25-02-2011, 18:10
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

matteever
25-02-2011, 18:14
Il problema era esattamente quello...Adesso funziona alla perfezione... Grazie 1000...

matteever
25-02-2011, 20:02
E'sorto un altro problema: adesso ignora l'inserimento di cognome(anche se inserisco un cognome, non me lo mette nella stringa)...

Laikius91
26-02-2011, 11:41
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



getchar ();


o, pi sicuro:



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?

matteever
27-02-2011, 16:44
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()...

#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;
}

Laikius91
28-02-2011, 00:33
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!

matteever
28-02-2011, 16:46
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'...

Loading