概述
问题场景:
用户输入密码,输入完后进行输入,用户输入Y确认,N取消,代码如下:
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//输入密码,并存放在password数组中
printf("请确认(Y/N):>");
ret = getchar();
if ('Y' == ret)
printf("确认成功n");
else
printf("放弃确认n");
这时候用户输入完密码后,程序不会让用户输入,而是直接结束了,这个问题很明显是上面的scanf输入后,输入流中最后还保留一个n被getchar()读取了,这时候输出ret就是10,对应的ASCII码表就是换行符。
printf("%dn",ret); //10
解决方法:
首先是一个不完美的解决方法,也就是在用户输入Y/N前再写一个getchar()虽然这样的话可以把scanf的输入流多余的n消耗掉,代码如下:
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//输入密码,并存放在password数组中
printf("请确认(Y/N):>");
getchar(); //消耗掉n
ret = getchar();
if ('Y' == ret)
printf("确认成功n");
else
printf("放弃确认n");
return 0;
若用户在输入密码的时候,输入了一个空格后接着输入其他的字符,形如下
scanf("%s", password); // 123456 ABC
由于scanf的读取以空格为结束,当读取完123456后scanf读取结束,虽然第一个getchar()能够把n消耗掉,但是输入流中还有ABC,ret就无法正常赋值,所以有了如下解决办法:
int ch = 0;
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//输入密码,并存放在password数组中
while ((ch = getchar()) != 'n') //消耗掉多出来的值
{
;
}
printf("请确认(Y/N):>");
ret = getchar();
if ('Y' == ret)
printf("确认成功n");
else
printf("放弃确认n");
return 0;
利用一个while循环不断地把输入流多余的代码都读取掉,这样的话最后就不会有多余的值了。
最后
以上就是超帅小虾米为你收集整理的C语言中用while解决getchar()中输入流的问题问题场景:解决方法:的全部内容,希望文章能够帮你解决C语言中用while解决getchar()中输入流的问题问题场景:解决方法:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复