sách gpt4 ai đã đi

scanf(argument) == 1 so với 1 == scanf(argument) không có sự khác biệt?

In lại 作者:行者123 更新时间:2023-11-30 15:45:43 28 4
mua khóa gpt4 Nike

我真的很困惑,当像 1 == scanf("%lg", &entry) 交换为 scanf("%lg", &entry) == 1 没有区别。我的实验书上说的是前者,而我觉得后者是可以理解的。

1 == scanf("%lg", &entry) thể hiện 1 必须等于 scanf("%lg", &entry) 谁能解释一下这个吗?我理解后者,即 scanf("%lg", &entry) 的评估必须等于 1

我尝试传递很多不同的值,但没有什么区别。

    #include 
#include

int main(void) {
double entry = 0.0;
double total = 0.0;
int number_of_entries = 0;
while (scanf("%lg", &entry) == 1 ) {
total += entry;
number_of_entries++;
}
/* print the average of all the entries */
printf("%f\n", total / number_of_entries);
return EXIT_SUCCESS;
}

1 Câu trả lời

一般来说,您不应该对(1 == scanf(...))感到惊讶。行为与 (scanf(...) == 1) 相同,因为相等是 symmetric 。然而,之所以如此,是因为其中一个操作数是幂等的(特别是文字常量 1 ). scanf()是唯一具有副作用的表达式,因此当 == 的参数时,不可能对代码进行不同的解释。是相反的。

Nhưng,== 的参数的求值顺序未指定。所以,如果在 == 一边具有可以影响另一方的副作用,那么评估顺序将影响 == 的结果操作,并且反转参数可能会导致不同的行为。因此,这样的程序将具有未定义的行为。

作为一个愚蠢的例子,请考虑:

một = 0;
if (scanf("%d", &a) == a) {
...
}

该代码片段具有未定义的行为,因为未指定 Một 是否在 == 的右侧将是上面语句中初始化的旧值,或者 scanf() 的新值。电话可能已提供。更改参数的顺序可能会导致程序表现不同,但该行为仍然未定义。

关于c - scanf(参数) == 1 vs 1 == scanf(参数) 没有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862101/

28 4 0
Bài viết được đề xuất: c - 使用 RtlVirtualUnwind api 检索参数
Bài viết được đề xuất: 将 elisp unixtime 转换为 js-date 对象
Bài viết được đề xuất: C 从 SD 逻辑恢复图像
Bài viết được đề xuất: c - 结构初始化期间的静态数组初始值设定项
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com