2014-10-08 42 views
0

我有以下簡單的C代碼,用戶需要以這個特定順序提出幾個問題,其中包括「你叫什麼名字?」和「你最喜歡的顏色是什麼?」。爲了確保程序給出的答案符合相應的問題,我做strcmp。但是,當我輸入正確的問題時,它會輸出兩行?並終止程序,跳過第二個輸入,而不是用「Bob」回答。當我輸入第一個問題的錯誤輸入時,它不會跳過第二個輸入。如何正確使用strcmp?用戶輸入不匹配字符串比較,跳過第二個輸入

這裏有什麼問題,我該如何解決?

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 

    int main(void) { 
     char questionOne[50]; 
     char questionTwo[50]; 

     scanf("%s", questionOne); 
     if(strcmp(questionOne, "What is your name?\n") == 0) { 
      printf("Bob\n"); 
     } 
     else { 
      printf("???\n"); 
     } 

     scanf("%s", questionTwo); 
     if(strcmp(questionTwo, "What is your favourite colour?\n") == 0) { 
      printf("Blue\n"); 
     } 
     else { 
      printf("???\n"); 
     } 

     return 0; 
    } 
+1

看到這個問題:http://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered- using-scanf – 2014-10-08 00:22:30

+0

'sctcmp' == 0的結果如果字符串相等,則返回負數;如果第一個字符串比第二個字符串「字面上小」,則返回負數,否則返回正數。 – user3159253 2014-10-08 00:31:30

+1

您將需要使用'fgets()'來讀取輸入行,並附有換行符,然後可以與您的字符串(已包含換行符)進行比較。 'scanf(「%s」,questionOne);'跳過空格,製表符和換行符(統稱爲空白),讀取一個或多個非空白字符,並停止在第一個空白處掃描。 – 2014-10-08 00:35:31

回答

1

「SCANF匹配的非空白字符的序列;下一指針必須是指向字符數組,它是足夠長以保持輸入序列和終止空字符(‘\ 0’) ,它會自動添加,輸入字符串停在空白處或最大字段寬度處,以先發生者爲準。「取自Rafal Rawiki。

換句話說,你不會得到整個句子。

您可以用fgets()來獲得整條生產線