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

C语言代码问题排查:筛选100-1000000间含指定数字的数

你的C语言代码问题排查与修正

核心错误点:

  • scanf调用错误
    原代码里的scanf("%d\n", n);有两个问题:一是格式串末尾的\n会让程序在你输入数字后,还得再输入个空白(比如回车、空格)才会继续执行,交互起来很别扭;二是没传变量的地址,scanf需要通过地址才能修改n的值,正确写法是scanf("%d", &n);。

  • 重复输出同一个数
    原来的逻辑是每找到一位匹配就打印一次,比如111包含1的话,会被打印三次。应该加个标记,只要找到任意一位匹配,就记下来,内层循环结束后只打印一次。

可选优化:输入合法性校验

原代码没检查用户输入的是不是单个数字(0-9),如果输入多位数或者字母,程序会乱套。可以加个校验,确保输入符合要求。

修正后的完整代码:

#include <stdio.h>

int main() {
    int n, m;
    puts("Enter your digit:");
    // 修正scanf并添加输入校验
    if (scanf("%d", &n) != 1 || n < 0 || n > 9) {
        puts("Error: Please enter a single digit (0-9).");
        return 1;
    }

    int j = 100;
    while (j <= 1000000) {
        int has_match = 0; // 标记是否包含目标数字
        int temp = j;
        // 遍历当前数字的每一位
        while (temp > 0) {
            if (temp % 10 == n) {
                has_match = 1;
                break; // 找到匹配就不用继续检查了
            }
            temp /= 10;
        }
        if (has_match) {
            printf("%d\n", j);
        }
        j += 1;
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:41:38