【发布时间】:2018-05-03 01:14:59
【问题描述】:
我想比较一些字符串,但不幸的是我没有找到任何合适的方法。
背后的想法是要求键盘输入,读取一个变量,一个符号,如果它是“y”或“n”(显然是“yes”或“no”),它会执行某些活动。如果 char 的值都不是,则再次询问问题,直到“y”或“n”中的任何一个都没有被按下。我不明白如何实现。
#include <stdio.h>
#include <string.h>
int main()
{
char answer;
answer='a';
while (answer!='n'&&answer!='y')
{
printf("\nQuestion? (y/n) ");
scanf("%c",&answer);
}
return 0;
}
这实际上效果很好,但是如果我不按'y'或'n',“while”会再次开始,由于我无法理解的原因,“printf”的执行次数比输入的长度。因此,如果我们运行此代码并应用“asdf”作为输入(四个符号),“while”中的“printf”将显示五次(四加一)。结果是:
Question? (y/n)
Question? (y/n)
Question? (y/n)
Question? (y/n)
Question? (y/n)
在我的代码中,其他的一切都非常好,但是这个......显然,这不是最好的方法。我也试过“strcmp()”:
#include <stdio.h>
#include <string.h>
int main()
{
char answer='a';
while (strcmp(answer,'n')!=0&&strcmp(answer,'y')!=0)
{
printf("Question?");
scanf("%c",&answer);
}
return 0;
}
我不知道为什么,但程序甚至没有启动。很明显,我没有正确实现“strcmp”,我不明白出了什么问题。
任何想法,我应该怎么做,这样我可以避免在“while”中多次执行“printf”或让“strcmp”按我要求的方式工作?
【问题讨论】:
-
你是否会输入 asdf+'enter' ?
-
是的。老实说,我不知道其他方式来应用我的意见。
-
输入是由
scanf..这就是额外迭代的原因 -
'enter' 键算作一个字符来scanf。只读取一个不输入的键取决于您的操作系统,寻找类似 kbhit() 和 getkey() 的东西。或者测试 answer=='\n' 并忽略它。
-
scanf(" %c",&answer);试试这个...这将确保\n被消耗。