la funzione scanf getchar viene saltata

Una domanda molto semplice. Perché scanf viene saltato nel primo ciclo while. L’ho provato usando getchar () e il risultato è lo stesso. getchar è saltato.

Se voi ragazzi non capite di cosa sto parlando, potete provare a compilarlo e voi ragazzi capirete di cosa sto chiedendo.

#include  #include  #include  typedef struct rec{ int num; char pref[16]; float point; struct rec* next; }rec; void dataInput(float*,char*); rec* insertNode(rec*); int main(){ int i=1; rec* entr,*pt = NULL; entr = (rec*) malloc(sizeof(rec)); entr->num = i; dataInput(&entr->point,entr->pref); entr->next = NULL; char key; i++; while(1){ printf("Continue ? If YES press 'y',or NO press 'n'\n"); key = getchar(); if(key == 'n')break; else if(key == 'y'){ if(!pt){ pt = insertNode(entr); }else{ pt = insertNode(pt); } dataInput(&pt->point,pt->pref); pt->num = i; i++; continue; }else{ printf("Wrong key! Please Press again! \n"); } } pt = entr; while(pt){ printf("num : %d, pref : %s, point: %.1f\n", pt->num, pt->pref, pt->point); pt = pt->next; } getchar(); getchar(); return 0; } void dataInput(float* point,char* pref){ printf("Input Point\t : "); scanf("%f",point); printf("Input Pref\t : "); scanf("%s",pref); } rec* insertNode(rec* current){ rec* newnode = (rec*)malloc(sizeof(rec)); current->next = newnode; newnode->next = NULL; return newnode; } 

È perché scanf lascerà un simbolo '\n' (fine) nel buffer di input. Questo simbolo sarà consumato da getchar alla prima iterazione di questo ciclo while(1) .

getchar() lascia un carattere di nuova riga nel buffer di input che viene letto dal successivo scanf ().

È ansible utilizzare risolvere questo utilizzando uno spazio iniziale nel scanf:

 scanf(" %c ...", &c,..); 

che dice allo scanf di ignorare tutti i caratteri dello spazio bianco. Oppure usa un altro getchar() subito dopo il primo getchar () per consumare la nuova riga.