C语言如何识别首元素不同的两种定长数字输入类型
两类变长数字输入的识别实现方案
直接使用scanf("%d %d %d",&a,&b,&c)一次性读取3个值时,若输入仅含2个数字,scanf会进入阻塞状态等待第三个输入,这是程序卡住的核心原因。
你可以拆分读取流程实现两类输入的识别,具体实现逻辑如下:
- 第一步:单独读取第一个整数,判断输入类型
- 第二步:根据第一个整数的取值,读取对应数量的剩余参数
参考代码
#include <stdio.h> int main() { int first, val2, val3; // 先读取首元素判断输入格式 scanf("%d", &first); if (first == 1) { // 首元素为1,读取后续2个参数,总共3个值 scanf("%d %d", &val2, &val3); // 此处补充首元素为1的业务逻辑 } else if (first == 2) { // 首元素为2,读取后续1个参数,总共2个值 scanf("%d", &val2); // 此处补充首元素为2的业务逻辑 } else { // 此处可补充首元素非法的异常处理逻辑 } return 0; }
可选优化
如果需要严格按行处理,避免上一行残留的无效字符影响下一行输入,可以在每类输入处理完成后,清空当前行的输入缓冲区:
// 放在每个分支业务逻辑的最后即可 while (getchar() != '\n');
内容的提问来源于stack exchange,提问作者Farhandika
相关产品推荐
相关产品推荐

