C语言如何持续读取用户输入,用户未输入值直接按回车时停止
C语言空回车终止的持续输入实现方案
你提供的参考代码摘自Codechef博客,属于C++实现,仅能在输入流结束(如用户输入Ctrl+D/Ctrl+Z)或存储元素超过20个时终止,无法识别用户直接按回车的空输入场景,不符合需求。
核心实现逻辑
- 放弃直接用
scanf("%d")读取数值:scanf匹配整数时会自动忽略所有前置空白字符(含换行符),无法捕捉空回车操作 - 采用「先读行、后解析」的方案:先读取完整一行输入,判断是否为空行,空行直接终止流程;非空行再解析出需要的数值
可运行C语言实现代码
#include <stdio.h> #define MAX_BUF_LEN 1024 #define MAX_STORE 20 #define MIN_VALID 1 #define MAX_VALID 120 int main() { char buf[MAX_BUF_LEN]; int num, stored[MAX_STORE], cnt = 0; while (fgets(buf, sizeof(buf), stdin)) { // 判定为空行(直接按回车)则终止 if (buf[0] == '\n') break; // 解析行内整数 if (sscanf(buf, "%d", &num) == 1) { if (cnt < MAX_STORE && num >= MIN_VALID && num <= MAX_VALID) { stored[cnt++] = num; } } } // 测试输出,可根据业务需求修改 printf("读取到的有效数值共%d个:\n", cnt); for (int i = 0; i < cnt; i++) { printf("%d ", stored[i]); } putchar('\n'); return 0; }
补充说明
- 如果需要兼容用户输入全空格后按回车也判定为终止的场景,可以在判断空行前先跳过所有空白字符,再判断剩余内容是否为空
fgets会读取输入的换行符存入缓冲区,因此判定行首为换行符即可确认用户没有输入任何内容直接按了回车- 保留了原参考代码的数值范围校验、最多存储20个有效元素的逻辑
内容的提问来源于stack exchange,提问作者spaghetticode
相关产品推荐
相关产品推荐

