我用字符串比较制作了这个笑话程序,但当我输入"是"它还为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");
}
答案 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;
}
编辑:删除了一些建议的字词。抱歉,从操作代码中包含它们。