2016-04-28 31 views
0

我正在編寫一個程序來掃描一個人的姓名,性別和三個月檢查。這裏是想進入我的一個例子:我可以檢查一個變量的條件嗎

Jack m 200 250 300 

如果沒有填寫其他細節我希望循環結束用戶類型「夠了」,並按下回車。我嘗試使用兩個scanf,一個用於單獨的字符串,另一個用於其他字符串,但不能正確循環。這裏是我的代碼:如果用戶僅按下回車鍵,將得到函數返回NULL和循環停止

while(gets(line)) { ... } 

int main() 
{ 
int i; 
char names[SIZE][NAME_LEN] = {0}, gender[SIZE] = {0}; 
int sales[SIZE][SALES_LEN] = {0}; 
printf("Enter the name, gender and three month sales for name %d: ", i+1); 
for (i=0; i<SIZE; i++){ 

    if (strcmp(names[i], "Enough") == 0 || strcmp(names[i], "enough") == 0) 
     break; 

    scanf("%s %c %d %d %d",names[i], &gender[i], &sales[i][0],&sales[i][1],&sales[i][2]); 
} 

return 0; 
} 
+0

閱讀並檢查第一個單詞。然後剩下的,如果需要的話......問題將出現在名爲「足夠」的人...... –

+0

步驟1)用'fgets()'讀取用戶輸入,然後_then_分析讀取的緩衝區。 – chux

+0

是的,這是一個錯字,我跑了它,並打印出我的輸入,以確保。 –

回答

0

你的代碼被破壞的地方很多:糟糕的語句和錯誤的閱讀和解析類型。這可能會訣竅:

for (i=0; i<SIZE; i++) { 
    char buffer[100]; // A full line 
    printf("Enter the name, gender and three month sales for name %d: ", i+1); 
    if (fgets(buffer,sizeof buffer,stdin)==NULL // if nothing can be read 
     || strncasecmp(buffer,"-stop",5)) {  // or if user typed "-stop" and whatever, an impossible lastname? 
    break; 
    } 
    // try to convert the line into fields of given types... 
    if (sscanf(buffer,"%s %c %d %d %d",names[i], &gender[i], &sales[i][0],&sales[i][1],&sales[i][2])!=5) { 
    // do something if conversions failed 
    } 
} 
0

你可以使用這樣的事情。這樣用戶不必輸入「足夠」。 *不要使用gets()函數,因爲它不安全(存在緩衝區溢出的風險)。 我通常將其包裝在一個控制輸入長度的函數中。

相關問題