在线编译器 C

#include <stdio.h> int main() { int n, sum = 0, m = 1, save_n; scanf("%d", &n); save_n = n; while (save_n > 0) { int d = save_n % 10; sum = sum + d; m = m * d; save_n = save_n / 10; } if (m = sum) ; printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数的各位数字之和与各位数字之积是否相等,但存在语法错误和逻辑问题。

- 第12行的 `if (m = sum)` 使用了赋值运算符 `=` 而不是比较运算符 `==`,这会导致条件永远为真(因为赋值后 `m` 等于 `sum`,非零即为真),并且后面的分号 `;` 使得 `if` 语句体为空,导致 `else` 没有对应的 `if`。
- `else` 前面不应该有分号,`if` 和 `else` 之间不能有分号隔开。

- 检查 `if` 条件中的运算符是否写成了赋值,并确保 `if` 和 `else` 之间没有多余的分号。