You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多测试用例下判断数字含7出错:为何所有输入均输出YES?

错误原因分析与修复方案

核心问题:未初始化的局部变量flag

你这段代码的问题出在**flag变量没有初始化**。在C语言里,局部变量如果不手动赋值,会包含随机的垃圾值:

  • 如果第一个测试用例的数字包含7,flag会被设为1;后续测试用例哪怕数字不含7,flag也不会被修改,依然保留之前的1,导致错误输出YES。
  • 要是第一个测试用例的数字不含7,flag的初始垃圾值也可能恰好是1,照样会误输出YES。

而移除多测试用例循环后,程序只跑一次,可能刚好垃圾值是0(或者你测试的第一个数字刚好含7),所以看起来正常,但这完全是偶然,逻辑根本不对。

修复后的代码

只需要给flag初始化为0,保证每次处理新测试用例时,初始状态都是“未找到7”:

#include <stdio.h>

int main() {
    int T;
    scanf("%d", &T);

    while (T != 0) {
        int X;
        scanf("%d", &X);
        // 初始化flag为0,明确初始状态是未找到7
        int flag = 0, result;

        while (X != 0) {
            result = X % 10;

            if (result == 7) {
                flag = 1;
            }

            X = X / 10;
        }

        if (flag == 1) {
            puts("YES");
        } else {
            puts("NO");
        }

        T--;
    }

    return 0;
}

额外优化建议

可以在找到7后直接跳出内层循环,不用继续遍历数字的每一位,能提升一点效率:

while (X != 0) {
    result = X % 10;
    if (result == 7) {
        flag = 1;
        // 找到7就直接退出循环,没必要再检查剩下的位
        break;
    }
    X = X / 10;
}

内容的提问来源于stack exchange,提问作者Bharath R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:50:27