C语言中忽略空白符读取7个数字至数组的优化方案
高效读取带任意空白符的7个数字方案
嘿,你这个需求其实用标准库的scanf()就能完美解决,根本不用额外手动去处理空白符!先给你说最简便的方案——
方案一:直接用scanf()循环读取(最优解)
scanf()在读取整数(%d格式符)的时候,会自动跳过所有空白字符(包括空格、换行、制表符这些),不管用户输入是1234567还是123 45 6 7,甚至是换行分隔的数字,它都能准确识别出每一个整数。
直接上代码:
#include <stdio.h> int main() { int nums[7]; printf("请输入7个数字(空格、换行随便加都没问题):\n"); // 循环读取7个整数,自动跳过空白符 for (int i = 0; i < 7; ) { // 加入错误处理,防止用户输入非数字内容 if (scanf("%d", &nums[i]) == 1) { i++; // 读取成功才移动索引 } else { printf("输入无效,请输入整数!\n"); // 清空输入缓冲区里的错误内容,避免死循环 while (getchar() != '\n'); } } // 验证结果 printf("你输入的7个数字是:"); for (int i = 0; i < 7; i++) { printf("%d ", nums[i]); } putchar('\n'); return 0; }
这个方案的优势:
- 代码极简,完全利用标准库的内置逻辑,不需要自己写空白符过滤代码
- 效率高,
scanf()的底层实现经过优化,比手动处理字符串快得多 - 自带一定的错误处理能力,能应对用户输入非数字的情况
方案二:读取整行后解析(适合复杂预处理场景)
如果你需要先拿到完整的输入内容再做处理(比如要记录原始输入),可以用fgets()读取整行,再用strtol()逐个解析数字:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int nums[7]; char input_buf[256]; printf("请输入7个数字:\n"); // 读取整行输入 if (fgets(input_buf, sizeof(input_buf), stdin) == NULL) { printf("读取输入失败!\n"); return 1; } char *ptr = input_buf; int num_count = 0; while (num_count < 7) { // 手动跳过空白符 while (*ptr != '\0' && strchr(" \t\n", *ptr)) { ptr++; } if (*ptr == '\0') { printf("输入的数字不够7个!\n"); return 1; } // 解析当前数字,strtol会自动跳过前缀空白(其实这里已经跳过了) long num = strtol(ptr, &ptr, 10); nums[num_count++] = (int)num; } // 输出结果 printf("你输入的7个数字是:"); for (int i = 0; i < 7; i++) { printf("%d ", nums[i]); } putchar('\n'); return 0; }
这个方案适合需要对输入做额外处理的场景,但代码量比第一种多,而且效率略低(毕竟要手动遍历字符串)。
总结
如果只是单纯要读取7个数字、忽略空白符,第一种用scanf()循环读取的方案绝对是最简便高效的,完全满足你的需求,不需要额外去做空白符去除操作。
内容的提问来源于stack exchange,提问作者dirlik
相关产品推荐
相关产品推荐

