为什么运行到输入序号那里就跳出来了啊··?

来源:百度知道 编辑:UC知道 时间:2024/06/23 01:21:11
#include "stdio.h"
void tq()
{char zm;
char a,b,c,d,e;
printf("-----自动提款-----\n");
printf("a.100元\n");
printf("b.200元\n");
printf("c.500元\n");
printf("d.800元\n");
printf("e.其他金额!\n");
printf("请输入您选择的序号:");
scanf("%c",&zm);
if(zm=='a') printf("成功提出100元!\n");
if(zm=='b') printf("成功提出200元!\n");
if(zm=='c') printf("成功提出500元!\n");
if(zm=='d') printf("成功提出800元!\n");
if(zm=='e') ;
}
void mm(long int mm)
{printf("请输入密码:");
scanf("%ld",&mm);
if(mm==123456)
{printf("密码正确!!!\n");
tq(mm);
}
else
printf("密码错误!\n");
}
main()
{int zhanghao;
print

非常同意一楼的说法。
“因为在输入密码 123456后要按回车,回车也被存在了键盘缓冲区中,因此scanf("%c",&zm); 时zm中得到键盘缓冲区中的值(也就是回车)”
但解决办法若按一楼的解法,运行后会直接输出提款100元,因为把123456a中“a”赋给了ZM。同理若输入123456b就会提示提款200元。达不到预期目的。
因此就出在那个回车上,我们只要找个对象把回车接收住就可以了。

解决方法:在
if(mm==123456)
{ printf("密码正确!!!\n");
tq();
}
的printf("密码正确!!!\n");后加上getchar();即可,原理是getchar();捕获了回车。

因为在输入密码 123456后要按回车,回车也被存在了键盘缓冲区中,因此scanf("%c",&zm); 时zm中得到键盘缓冲区中的值(也就是回车);

你可以在运行输入密码的时候输入 123456a看看程序的行为,那就容易理解这个程序出现的问题了。