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

C语言字符转ASCII转换器printf输出多余整数10的解决方法咨询

C语言字符转ASCII转换器额外输出10的问题解决方案

问题原因

额外输出的数值10是**换行符(\n)**对应的ASCII值,问题根因来自scanf("%c", &argc)的读取逻辑:

  • 每次输入字符后按下回车键确认时,输入缓冲区会同时存入你输入的目标字符 + 换行符\n
  • %c格式符默认不会跳过空白字符(换行、空格、制表符都属于空白字符),所以每次循环会依次读取目标字符和换行符,就会出现输出完目标ASCII值后额外打印10的情况。

解决方案

有两种常用修复方式:

方案1:修改scanf格式串(最简单)

在%c前加一个空格,改为scanf(" %c", &argc),这个空格会指示scanf主动跳过读取前所有的空白字符,直接读取第一个非空白的输入字符,自然不会读到残留的换行符。
修复后核心代码段:

do {
    scanf(" %c", &argc);
    printf("%d\n", argc);
} while (argc != 'Z');

方案2:手动清空输入缓冲区(适合复杂输入场景)

每次读取完字符后,把输入缓冲区里残留的所有字符(包括换行符)都读走丢弃,避免下次循环读到无效字符:

do {
    scanf("%c", &argc);
    printf("%d\n", argc);
    // 清空输入缓冲区残留内容
    while(getchar() != '\n');
} while (argc != 'Z');

修复后完整可运行代码

#include <stdio.h>

int main() {
    char ch;
    printf("Enter for ASCII: ");
    do {
        scanf(" %c", &ch);
        printf("%d\n", ch);
    } while (ch != 'Z');
    return 0;
}

注:原代码中void main()是非标准写法,标准C中main函数返回值应为int类型,末尾加return 0;符合规范。

内容的提问来源于stack exchange,提问作者ycohui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:11