我有以下代码。我希望用户输入a
或r
并继续执行该程序,或者如果他输入其他内容,则尝试获取用户输入。
但我的问题是,当我输入非法值时,程序会显示两次消息,而不仅仅是一次。如何让消息只显示一次?
label:
puts ("a/r?");
c = getchar ();
if (c != 'a' || c != 'r')
goto label;
答案 0 :(得分:2)
您应该使用:if (c != 'a' && c != 'r')
另外,为避免重复邮件,您应将getchar()
替换为scanf("%c", &c)
答案 1 :(得分:0)
如果用户输入a
,他们必须按下键盘上的 enter 键才能输入注册。此键在标准输入中留下换行符,因此第二次读取该字符,测试再次失败。
测试因任何输入而失败,因为您尝试将输入同时作为两件事。您必须使用&&
而不是||
才能检查输入是否是您要查找的字符之一。我知道这听起来应该是相反的方式,但事实并非如你所观察到的那样。