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
相关产品推荐
相关产品推荐

