指令执行两次

时间:2016-01-05 22:42:06

标签: c

我有以下代码。我希望用户输入ar并继续执行该程序,或者如果他输入其他内容,则尝试获取用户输入。

但我的问题是,当我输入非法值时,程序会显示两次消息,而不仅仅是一次。如何让消息只显示一次?

label: 
    puts ("a/r?"); 
    c = getchar (); 
    if (c != 'a' || c != 'r') 
      goto label; 

2 个答案:

答案 0 :(得分:2)

您应该使用:if (c != 'a' && c != 'r')

另外,为避免重复邮件,您应将getchar()替换为scanf("%c", &c)

答案 1 :(得分:0)

如果用户输入a,他们必须按下键盘上的 enter 键才能输入注册。此键在标准输入中留下换行符,因此第二次读取该字符,测试再次失败。

测试因任何输入而失败,因为您尝试将输入同时作为两件事。您必须使用&&而不是||才能检查输入是否是您要查找的字符之一。我知道这听起来应该是相反的方式,但事实并非如你所观察到的那样。