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

#include <stdio.h> int main() { int n; scanf("%d", &n); int arr[10] = {0}; int d = 0; while (n > 0) { int d = n % 10; if (d == 9) cnt++; n=n/10; } if (d == 1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否包含数字9,但存在几个问题。

代码中声明了变量 `cnt` 但没有定义,同时 `d` 变量在循环内外重复声明,导致循环结束后判断的是最后一次取出的个位数,而不是统计结果。

- 变量 `cnt` 没有声明就直接使用,编译器会报错。你需要先声明 `cnt` 并初始化为0。
- 循环内部 `int d = n % 10;` 重新声明了一个局部变量 `d`,这不会修改循环外部的 `d`。循环结束后判断的 `d` 是外部未赋值的变量,逻辑不对。你应该在循环外部声明 `d`,循环内只赋值。