如何停止读取输入值并执行else语句?scanf接收<6个输入时跳转至else执行
解决两个
scanf输入控制的需求 嘿,刚好碰到过类似的场景,给你拆解一下这两个需求的实现思路,都是围绕scanf的返回值和输入控制来做的:
需求1:停止读取输入值并执行else语句
scanf的返回值是成功读取的变量个数,另外当输入遇到EOF(Windows按Ctrl+Z,Linux/macOS按Ctrl+D)、输入类型不匹配时,会自动停止读取。我们可以利用这个特性,结合条件判断来触发else分支。
场景1:遇到输入异常/EOF时停止
比如读取整数,输入非整数或EOF就停止并执行else:
#include <stdio.h> int main() { int num; printf("请输入整数(输入非整数或Ctrl+Z/D停止):\n"); // 成功读取1个整数则进入if分支 if (scanf("%d", &num) == 1) { printf("你输入了:%d\n", num); } else { // 读取失败(停止读取)时执行这里 printf("停止读取,执行else分支代码\n"); // 可选:清空输入缓冲区的残留内容,避免影响后续操作 while (getchar() != '\n'); } return 0; }
场景2:主动输入特定值停止
比如输入-1就停止读取,之后执行else逻辑:
#include <stdio.h> int main() { int num; printf("请输入整数(输入-1停止):\n"); while (scanf("%d", &num) == 1) { if (num == -1) { break; // 主动停止读取,跳出循环 } printf("你输入了:%d\n", num); } // 跳出循环后执行else对应的逻辑 printf("已停止读取,执行else分支代码\n"); return 0; }
需求2:仅接收少于6个输入时跳转至else分支
这个更直接,scanf读取多个变量时,返回值就是成功读取的数量。只要判断返回值小于6,就触发else分支:
#include <stdio.h> int main() { int a, b, c, d, e, f; printf("请输入6个整数(用空格/回车分隔):\n"); // 尝试读取6个整数,记录成功读取的数量 int read_count = scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f); if (read_count == 6) { printf("成功读取6个输入:%d, %d, %d, %d, %d, %d\n", a, b, c, d, e, f); } else { printf("仅读取到%d个输入,执行else分支代码\n", read_count); // 必选:清空输入缓冲区的残留内容 while (getchar() != '\n'); } return 0; }
这里要注意:
- 如果输入中途遇到非整数、EOF,
scanf会停止读取,返回已成功读取的数量(比如输入3个整数后输入字母,返回值为3,小于6,直接进入else) - 一定要清理输入缓冲区,否则残留的内容会干扰后续的输入操作
内容的提问来源于stack exchange,提问作者Solo Trench
相关产品推荐
相关产品推荐

