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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:05:39