C语言连续多行输入不同类型数据时char类型无法读取的原因是什么?
问题根因
该问题是scanf输入缓冲区的残留换行符导致的逻辑异常,属于C语言标准输入的常见特性,而非语法错误,因此编译器不会抛出报错:
- 执行第一个
scanf("%d",&c)时,你输入数字4后按下的回车键会生成\n(换行符)留在输入缓冲区中,%d格式符仅识别读取数字内容,不会自动处理这部分残留的空白字符。 - 后续执行
scanf("%c",&h)时,%c格式符默认会读取缓冲区中的任意字符,包含空格、换行、制表符等空白字符,因此该步骤会直接读取残留的\n存入变量h,不会等待你手动输入字符,所以你会看到程序直接跳过输入环节,直接打印了Enter strength的提示。 - 你最终打印变量
h时输出的是空行,本质就是被读取的换行符。
修复方案
可以选择以下任意一种常用方案解决:
- 在读取字符的
%c前添加空格,空格会指示scanf自动跳过所有前置空白字符:
printf("Enter the hard\n"); scanf(" %c",&h); // 注意%c前的空格不可省略
- 读取数字后手动清空缓冲区残留的换行符:
scanf("%d",&c); getchar(); // 读取丢弃缓冲区残留的换行符 printf("Enter the hard\n"); scanf("%c",&h);
内容的提问来源于stack exchange,提问作者Bilal Sohail Mirza
相关产品推荐
相关产品推荐

