【问题标题】:logical or in C programming Language [duplicate]逻辑或 C 编程语言 [重复]
【发布时间】:2017-01-29 16:34:35
【问题描述】:

有谁知道为什么这总是循环输入不同于 1 或 0 的值,以及在输入字符的情况下如何避免无限循环?

#include <stdio.h>

int a;

main()
{
    do 
{
    puts("Give 1 or 0 for input:");
    scanf("%d",&a); 
}   while(a!=0 || a!=1);

printf("\n%d",a);
return 0;

}

【问题讨论】:

  • 你的||应该是 &&
  • 对不起,类似于 1 或 0 的值是我要问的。
  • 如果我删除 || a!=1 一半或 a!=0 ||它工作得很好。

标签: c


【解决方案1】:

循环终止的唯一方法是a!=0a!=1 都为假。或者换句话说:它只能在a == 0a == 1同时结束。这当然是不可能的,所以循环永远不会终止。

如果您想在用户输入10 时终止循环,那么您需要一个逻辑与运算符:

do 
{
    puts("Give 1 or 0 for input:");
    scanf("%d",&a); 
} while(a!=0 && a!=1);

除此之外,您确实必须检查scanf 的返回值,并在失败时清除输入流。如果您输入一个字符,那么scanf 将表示它失败,但将字符留在输入流中。随后的迭代将卡在尝试读取该字符。

一种方法是使用scanf 本身和%*s 格式说明符。

do 
{
    puts("Give 1 or 0 for input:");
    int read_res = scanf(" %d",&a); 
    if (read_res != 1)
      scanf("%*s");
} while(a != 0 && a != 1);

格式字符串中的星号表示scanf 仍将匹配任何非空白字符并将它们从流中清除,但不会尝试将它们分配给任何东西(因此不需要额外的参数)。我还在%d 中添加了一个前导空格,以便忽略数字前的任何前导空格。

【讨论】:

  • 正确。如果char 输入,请同时解决其他问题。
  • 谢谢,很快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多