2014-10-08 87 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()来获得整条生产线