C语言用scanf单次%d输入能否给两个变量赋相同输入值
C语言输入值保留与逻辑实现方案
核心疑问解答
单个%d格式符在scanf中仅能对应一个变量地址,无法一次性为两个变量赋值。要解决统计位数时原始值被修改的问题,只需在修改N前定义一个额外变量存储原始值的副本即可。
现有代码问题梳理
- 变量K未初始化,直接进行自增运算会导致位数计算结果异常
- 输入范围判断逻辑错误:原有条件
N<=1 || N>=999999999会将合法边界值1、999999999判定为错误输入,不符合需求 - 缺失判断“N的各位数字是否包含K”的实现逻辑
修正后可运行代码
#include <stdio.h> int main() { int K = 0, N, raw_N; scanf("%d", &N); // 输入合法性校验 if (N < 1 || N > 999999999) { printf("Wrong Input\n"); return 0; } // 存储原始输入值副本 raw_N = N; // 统计数字位数K do { N = N / 10; K++; } while (N != 0); // 校验各位是否包含K int temp = raw_N; int has_k = 0; while (temp > 0) { if (temp % 10 == K) { has_k = 1; break; } temp = temp / 10; } printf(has_k ? "Yes\n" : "No\n"); return 0; }
实现说明
- 新增
raw_N变量存储原始输入值,统计位数时修改临时的N变量,不影响原始值使用 - 修正了输入范围判断逻辑,符合1≤N≤999999999的要求
- 补充了逐位匹配逻辑,遍历原始值的每一位与K比对,输出对应结果
内容的提问来源于stack exchange,提问作者Ymirjarlord
相关产品推荐
相关产品推荐

