输入时strcmp不会停止'是'命令

时间:2016-04-11 17:34:08

标签: c strcmp

我用字符串比较制作了这个笑话程序,但当我输入"是"它还为else语句输入了我所拥有的内容。当我键入" no"时,它不会这样做,并且如果我键入的内容不是"是"则可以预测。或"不"。

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

int main ()
{
    char ansr[50];
    printf("Are you a cop?");
    scanf("%s", &ansr);

    if (strcmp(ansr, "yes") == 0)
    {
        printf("Then get outta here buddy!");
    }

    if (strcmp(ansr, "no") == 0)
    {
        printf("Then you can learn the secret handshake!");
    }
    else 
        printf("\nDude! Yes or no question! Are you a cop?!\n");
}

3 个答案:

答案 0 :(得分:3)

有几点需要注意。首先,在使用之前,您永远不会使用scanf将任何内容读入ansr,这会导致未定义的行为。其次,正如其他人所说,你的if / else陈述不一致。第三,如果答案无效,您需要while循环再次询问问题。你可以像这样重新安排它:

int main ()
{
    char ansr[50];
    printf("Are you a cop?\n");
    scanf("%49s", ansr);

    while (strcmp(ansr, "yes") && strcmp(ansr, "no"))
    {
        printf("\nDude! Yes or no question! Are you a cop?!\n");
        scanf("%49s", ansr);
    }

    if (strcmp(ansr, "yes") == 0)
    {
        printf("Then get outta here buddy!\n");
    }
    else
    {
        printf("Then you can learn the secret handshake!\n");
    }

    return 0;
}

答案 1 :(得分:2)

ansr在通过strcmp()触摸之前保持未初始化,后者调用臭名昭着的未定义行为,任何事情都可能发生。

答案 2 :(得分:-1)

您的代码有一个if块和一个if else块。所以它比较ansr两次,如果是块,则将其更改为if else,它只会检查一次。

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

int main ()
{

char ansr[50];
printf("Are you a cop?");
//should take input here
if (strcmp(ansr, "yes") == 0)
{
    printf("Then get outta here buddy!");
}

else if (strcmp(ansr, "no") == 0)
{
   printf("Then you can learn the secret handshake!");
}

else printf("\nDude! Yes or no question! Are you a cop?!\n");

 return 0;
}

编辑:删除了一些建议的字词。抱歉,从操作代码中包含它们。