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
相关产品推荐
相关产品推荐

