【问题标题】:Why is the value of n not updating? [duplicate]为什么 n 的值没有更新? [复制]
【发布时间】:2021-03-19 18:45:27
【问题描述】:

n 的值在整个循环中保持为 1。在输入输入 0(根据需要)后它会停止,但每次我打印 n 的值时,它都会保持 1。我将不胜感激任何解释或解决方案。

代码如下:

#include <stdio.h>

int getInteger() {
    int n;
    scanf("%d", &n);
    return n;
}
int main(void) {
    int n;
    while (n = getInteger() != 0) {
        printf("Entered value is: %d\n", n);
    }
    return 0;
}

谢谢

【问题讨论】:

    标签: c loops while-loop scanf return-value


    【解决方案1】:

    运算符!= 的优先级高于=。看看这个blog

    在您的情况下,未正确使用运算符会导致不需要的逻辑错误,可以通过正确使用括号来解决,如下所示:

    #include <stdio.h>
    
    int getInteger() {
        int n;
        scanf("%d", &n);
        return n;
    }
    int main(void) {
        int n;
        while ( (n = getInteger()) != 0) {
            printf("Entered value is: %d\n", n);
        }
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      这是由于operator precedence,它定义了当缺少括号时哪些运算符绑定得更牢固,即a = b != c 会导致(a = b) != c 还是a = (b != c)?它导致后者,因为 != 绑定的次数比 = 多。

      要解决此问题,您需要明确地将括号括起来:

      while ((n = getInteger()) != 0)
      

      【讨论】:

        猜你喜欢
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多