【问题标题】:scanf Input output confusionscanf 输入输出混淆
【发布时间】:2016-06-01 11:13:57
【问题描述】:

我对我关于 while 循环如何工作的假设感到困惑.. 我在我的电脑上试了一下,发现所有情况都如预期的那样, 我是对的,还是我错过了什么?

 while(scanf("%d%d%d",&a,&b,&c) ,a||b||c ) { /* some code */ }

这意味着即使一个值(a、b 或 c)不为零,它也会循环


while(scanf("%d%d%d",&a,&b,&c) ,a&&b&&c ) {  /* some code */ }

这意味着只要 a、b 或 c 中的任何一个变为零,循环就会终止

【问题讨论】:

    标签: c while-loop scanf


    【解决方案1】:

    这是正确的,第一个循环将继续,直到所有三个值都变为零,而第二个循环将在三个项目之一变为零时停止。

    这是因为 comma operator 丢弃了第一个表达式的结果 - 本质上,表达式 a || b || ca && b && c 成为您的循环条件。

    请注意,当输入在读取停止组合(全零/一个零)之前结束时,您的循环可能不会终止。发生这种情况时,您的循环将变为无限。为防止这种情况发生,请将循环更改为

     while(scanf("%d%d%d",&a,&b,&c) == 3 && (a||b||c) ) { //some code }
    

     while(scanf("%d%d%d",&a,&b,&c) == 3 && a && b && c) ) { //some code }
    

    【讨论】:

    • 维基链接真的很有帮助,你的解释很到位!谢谢:)
    【解决方案2】:
    while(true) {//some code}  // loop will run
    while(false) {//some code} // loop will not run
    

    因为除0 之外的任何值都被视为真,因此您的第一个while 循环将执行,直到它们全部变为0。 并且在第二个while 循环中,如果其中任何一个变为0,则循环将不会执行。 只是基本的运算符。

    【讨论】:

    • 这不能回答问题,因为while(true) 永远不会变成false,反之亦然。 Truefalse 是常量,而 abc 是变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多