2017-04-14 82 views
0

我已經定義了一個結構C:scanf的字符串字段船長在while循環上轉換說明施加「%*」

typedef struct EMP { 
    char name[100]; 
    int id; 
    float salary; 
} EMP; 

我用它在while循環輸入

EMP emprecs[3]; 
int i; 

i = 0; 
while (i < 3) { 
    printf("\nEnter Name: "); 
    scanf("%*[\n\t ]%[^\n]s", emprecs[i].name); 
    printf("\Enter Id: "); 
    scanf("%d", &emprecs[i].id); 
    printf("\nEnter Salary: "); 
    scanf("%f", &emprecs[i].salary); 
    i++; 
} 

但循環只取第一個名字,然後跳過所有其他輸入(它結束,但是輸入爲空)。這個例子來自C教科書,那麼問題在哪裏?

如果沒有"%*[\n\t ]"字段跳過,它會更好,但教科書告訴您使用它。

回答

-3

試試這個

scanf(" %*[\n\t ]%[^\n]s", emprecs[i].name); 
     ^^^ 
    White space 

代替

scanf("%*[\n\t ]%[^\n]s", emprecs[i].name); 

此外,

scanf(" %d", &emprecs[i].id); 

scanf(" %f", &emprecs[i].salary); 
+1

'%D'和'%F'已經跳過空白。所以它背後的空間是多餘的。實際上,只有'%c','%['和'%n'是空格重要的格式說明符。在添加之前,'%* [\ n \ t]'也是多餘的。 –

+0

我通過在所有scanfs之前使用空白%並通過刪除%* [\ n \ t]來獲得它的工作。謝謝你的提示!我仍然不明白爲什麼字段跳過不符合教科書的說法。 – Hessu