【问题标题】: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)