Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 循环赢了';读取用户输入时不要停止_C_Logic - Fatal编程技术网

C 循环赢了';读取用户输入时不要停止

C 循环赢了';读取用户输入时不要停止,c,logic,C,Logic,即使输入n或n,此代码也无法停止循环 这是什么原因造成的 char next = ""; printf("Do u want continue\n"); scanf("%c", &next); getchar(); do { if (next=='y' ||next=='Y') { selection(); } else {

即使输入n或n,此代码也无法停止循环

这是什么原因造成的

    char next = "";

    printf("Do u want continue\n");
    scanf("%c", &next);
    getchar();
    do
    {
        if (next=='y' ||next=='Y')
        {
            selection();
        }
        else
        {
            printf("invalid Please Enter again");
            scanf("%c", &next);
        }
    } while (next !='n'|| next!='N')

除了dbush正确的答案外:

  • charnext=”“
    错误,下一步应该是
    char
  • 不要使用
    scanf
    ,只使用
    getchar
    scanf
    充满陷阱
替换此项:

char next;
...
scanf("%c", &next);
getchar();
为此:

int next;
...
next = getchar();
有条件的
(next!=“n”| next!=“n”)
始终为真

如果
next
'n'
next!='N'
为true使整个表达式为true。类似地,如果
next
'N'
,则
next!='n'
再次为真,使整个表达式为真

这里需要使用逻辑AND和
&&

} while (next !='n' && next!='N')

您的while条件将始终计算为true。输入字符将始终不是“N”或不是“N”。因为它只是一个字符,所以它永远不会是两个字符中的一个。相反,你需要确保不是他们两个。这是逻辑AND检查,而不是AND或检查。因此,相反,将该条件更改为AND,又称为next!='下一步!=='N'
,或者,如果您发现使用或更有意义,则通过使用布尔逻辑转换,以下条件等价于AND语句
!(next=='n'| | next=='n')

干杯

while (next !='n' || next!='N') is always true.
您可以这样简单地更改它:

while (next !='n')

然后你输入
n
,它停止了。

谢谢你,但我仍然面临另一个问题。当我输入n时,它将在关闭前首先循环到else语句。我对此一无所知。程序将一步一步地读取。那么我如何解决它呢?@WangLiangwei您需要添加一个额外的检查,看看结果是
'n'
还是
'n'
,如果不是,只会再次提示。@WangLiangwei很高兴我能提供帮助。如果你觉得它有用的话,请随意使用。