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

