2017-07-28 31 views
0

我正在使用結構在C中編寫一個簡單的程序。用戶需要爲結構輸入一些值 - 名稱和年齡。第一次輸入數據後,第二次程序跳過其中一個字段,只希望我輸入數據的第二個字段。我無法弄清楚什麼是錯的。獲取用戶輸入無法正常工作

struct Person { 

     char name[20]; 
     int age; 
    }; 

void main(){ 

    struct Person pArray[10]; 
    for (int i = 0; i < 10; i++) { 
     printf("Please enter a name and age:\n"); 
     printf("Name: "); 
     fgets(pArray[i].name, 20, stdin); 
     printf("Age: "); 
     scanf("%d", &pArray[i].age); 
    } 
} 

正如你所看到的,第一次進入喬納森和45後,它第二次跳過了名字,只想要年齡。這是爲什麼發生? enter image description here

+2

'的scanf( 「%d」,&粒子陣列[I]。年齡);' - >'的scanf( 「%d%* C」,&粒子陣列[I ] .age);' –

+0

您需要在'age'輸入後使用換行符。 – BLUEPIXY

+0

感謝您的快速回復,因此像Sourav Ghosh建議的那樣添加'%* c'會消耗這條線? – Keselme

回答

1

我儘量不要混合格式化和未格式化的輸入(例如,fgetsscanf)。這裏是您的程序僅使用fgets輸入:

#include <stdio.h> 

struct Person { 
    char name[20]; 
    int age; 
}; 

int main(){ 
    struct Person pArray[10]; 
    char numberBuffer[20]; 
    for (int i = 0; i < 10; i++) { 
     printf("Please enter a name and age:\n"); 
     printf("Name: "); 
     fgets(pArray[i].name, 20, stdin); 
     printf("Age: "); 
     fgets(numberBuffer, 20, stdin); 
     sscanf(numberBuffer, "%d", &pArray[i].age); 
    } 
}