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

C语言程序中scanf函数未等待用户输入直接执行后续代码的问题求助

解决scanf读取字符时跳过输入的问题

嘿,我一眼就瞅出问题在哪了!咱们先唠唠为啥会出现这种诡异情况:

你前面用scanf("%f", ...)读取浮点数的时候,输入完数值后按下的**回车符(\n)**会留在输入缓冲区里。等程序执行到scanf("%c", &A)时,它根本不会等你输入新内容,直接把缓冲区里剩下的这个回车符读进了变量A里——而回车符既不是Y也不是N,所以直接触发了INVALID INPUT的分支。

给你两种简单靠谱的解决方案:

  • 方案一:在%c前加空格
    修改读取字符的scanf语句,在%c前面加一个空格:

    scanf(" %c", &A); // 空格会自动忽略所有空白字符(回车、空格、制表符等)
    

    这个空格会告诉scanf跳过输入缓冲区里的所有空白字符,直到遇到第一个非空白字符才开始读取,完美解决残留回车的问题。

  • 方案二:用getchar()清空残留字符
    在读取字符的scanf之前,调用一次getchar()来吃掉缓冲区里的回车符:

    getchar(); // 清除之前输入留下的回车符
    scanf("%c", &A);
    

    这种方法适合场景简单的情况,如果缓冲区里有多个空白字符,可能需要多调用几次,但你的代码里用一次就足够了。

下面是用方案一修改后的完整代码:

#include <stdio.h>
int main() {
    float p, r, t, si;
    char A;
    printf("Principle Amount : ");
    scanf("%f", &p);
    printf("Rate of Intrest : ");
    scanf("%f", &r);
    printf("Time Period : ");
    scanf("%f", &t);
    si = ( p * r * t ) / 100;
    printf("Simple Intrest = %.2f \n", si);
    printf("Do you want to know the incremented amount ?\n");
    printf("Y for yes & N for no : ");
    scanf(" %c", &A); // 这里添加了空格
    if (A == 'Y') {
        printf("Incremented amount will be = %f", p + si);
    } else if (A == 'N') {
        printf("Thank You 4 using :-) ");
    } else {
        printf("INVALID INPUT");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:42:34