C语言scanf无法获取后续输入及输出错误问题求助
C语言程序输入异常与输出错误的修复方案
问题现象
- 输入全名(如Logan)时,第一个
scanf读取首字母后,后续输入直接被跳过,无法获取到店次数和饮品单价 - 输入单个首字母时,虽能完成输入,但总消费输出始终为0,不符合计算结果
修复后的代码
#include<stdio.h> int main(){ char firstLetterofName; int numOfVisits; float priceOfDrink; float total; printf("Hello! What is your name?\n"); scanf(" %c", &firstLetterofName); printf("How many times have you visited Starbucks in a month\n"); scanf("%d", &numOfVisits); printf("What is the price of the drink you order?\n"); scanf("%f", &priceOfDrink); total = priceOfDrink * numOfVisits; printf("Wow %c! You have spent $%.1f on Starbucks!\n", firstLetterofName, total); return 0; }
问题解析与修复说明
1. 输入全名时后续scanf跳过的问题
当输入Logan并按下回车,输入缓冲区会存入L o g a n \n。原代码中scanf("%c")仅读取第一个字符L,剩余的ogan\n留在缓冲区。后续scanf("%d")尝试读取整数时,遇到的第一个非空白字符是字母o,匹配整数失败,直接跳过输入步骤;同理scanf("%f")也会匹配失败。
修复:在%c前添加空格scanf(" %c", &firstLetterofName),空格会让scanf自动跳过所有空白字符(换行、空格等),只读取第一个非空白字符,彻底避免缓冲区残留内容干扰后续输入。
2. 总消费输出为0的问题
原代码用%d格式符输出float类型的total,%d是整数输出格式,会把浮点数的二进制存储错误解析为整数,导致输出异常。
修复:将格式符改为%.1f,%f用于输出浮点数,%.1f表示保留一位小数,符合预期的10.0输出格式。
内容的提问来源于stack exchange,提问作者Logan Swinney
相关产品推荐
相关产品推荐

