You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:04