我是靠谱客的博主 超帅小虾米,这篇文章主要介绍C语言中用while解决getchar()中输入流的问题问题场景:解决方法:,现在分享给大家,希望可以做个参考。

问题场景:

        用户输入密码,输入完后进行输入,用户输入Y确认,N取消,代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
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码表就是换行符。

复制代码
1
printf("%dn",ret); //10

解决方法:

        首先是一个不完美的解决方法,也就是在用户输入Y/N前再写一个getchar()虽然这样的话可以把scanf的输入流多余的n消耗掉,代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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;

        若用户在输入密码的时候,输入了一个空格后接着输入其他的字符,形如下

复制代码
1
scanf("%s", password); // 123456 ABC

        由于scanf的读取以空格为结束,当读取完123456后scanf读取结束,虽然第一个getchar()能够把n消耗掉,但是输入流中还有ABC,ret就无法正常赋值,所以有了如下解决办法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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()中输入流内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部