Онлайн компилятор C

#include <stdio.h> int grow_up(int n) { int a, b, c; while (n != 0) { a = n % 10; b = (n / 10) % 10; if (a < b) c = 0; n = n / 10; } if (c == 0) return 0; else return 1; } int main() { printf("%d", grow_up(136)); return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递增(例如136是递增的,因为1<3<6)。但代码存在逻辑问题。

- 变量c只在循环内部被赋值,但循环结束后才判断c的值。如果循环执行时n变为0,c可能从未被赋值(例如输入个位数时),导致未定义行为。
- 循环中每次比较当前位a和下一位b,但判断条件写反了:当a<b时(即递增时)却将c设为0,这会导致逻辑错误。实际上应该是在递减时标记为0。
- 循环结束后,如果所有相邻位都满足递增,应该返回1,否则返回0。但当前逻辑正好相反。