la fonction scanf getchar est ignorée

Une question très simple. Pourquoi scanf est ignoré dans la première boucle while. Je l’ai essayé en utilisant getchar () et le résultat est identique. getchar est ignoré.

Si vous ne comprenez pas de quoi je parle, vous pouvez essayer de le comstackr et vous comprendrez ce que je demande.

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

C’est parce que scanf laissera un symbole '\n' (fin) dans le tampon d’entrée. Ce symbole sera getchar par getchar à la première itération de cette boucle while(1) .

getchar() laisse un caractère de nouvelle ligne dans le tampon d’entrée qui est lu par le scanf suivant ().

Vous pouvez utiliser cela pour résoudre ce problème en utilisant un espace de début dans le scanf:

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

ce qui indique au scanf d’ignorer tous les caractères d’espacement. Ou utilisez un autre getchar() juste après le premier getchar () pour consumr la nouvelle ligne.