C语言用scanf读取短横线分隔char字符及二次输入异常处理
C语言字符区间读取输出问题修复方案
问题根因说明
- 二次输入异常:每次输入结束后按下的回车符
\n会残留在输入缓冲区,下一次%c读取时会优先读到这个换行符,导致-格式匹配失败,读取数值异常。 - scanf替换:
scanf_s是部分编译器提供的安全扩展,标准C的scanf不需要传后面的长度参数,调整格式字符串即可直接替换。
修复后完整代码
#include<stdio.h> int main(){ char x, y; int i; while (1) { // 格式串前加空格,跳过缓冲区所有前置空白字符(包括换行符) scanf(" %c-%c", &x, &y); if (x == '.' || y == '.') { return 0; } if (y >= x) { // 正序输出从小到大的字符 for (i = x; i <= y; i++) { putchar(i); } } else { // 倒序输出从大到小的字符 for (i = x; i >= y; i--) { putchar(i); } } putchar('\n'); } }
关键修改说明
- 替换
scanf_s为标准scanf,格式串开头加空格,彻底解决缓冲区残留换行符导致的二次读取异常问题 - 补充倒序输出逻辑,支持类似
c-a输入输出cba的需求 - 简化原代码的数组缓存逻辑,直接遍历输出字符,避免数组越界风险
内容的提问来源于stack exchange,提问作者Renato Rak
相关产品推荐
相关产品推荐

