逻辑或C编程语言

时间:2017-01-29 16:34:36

标签: c

有没有人知道为什么这总是为不同于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 :(得分:3)

循环终止的唯一方法是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添加了一个前导空格,以便在数字前忽略任何前导空格。