|

楼主 |
发表于 2019-5-29 11:01:04
|
显示全部楼层
本帖最后由 Aslcwd 于 2019-5-29 16:24 编辑
昨天到现在查了很多资料整理了一下方法:
方法1:
两次使用getchar();
第二次就能吃掉回车符
缺点只能应对,一次键加回车
按两次键加回车会出bug
方法2:
使用一次getchar();
scanf("%*c");
类似于吃掉字符,可以忽略换行符
还可以使用类似
scanf("%*[^/n]");
缺点都是
缺点只能应对,一次键加回车
按两次键加回车会出bug
方法3:
getche();
这种获得字符方法不需要使用回车
按啥是啥,立即执行,方便得很
缺点在于输入错误无法删除重新输入
方法4:
getchar();
while(getchar()!='\n')
{
continue;
}
把不是回车符号的循环掉
不论按多少字符,只获取第一个,其余的全部清除
基本完美收官
适用于各个版本编译器
方法5:
getchar();
fflush(stdin);
清除字符语句
清空所有
完全完美部分编译器并不支持该语句
代码如下:
- #include <stdio.h>
- int judge(char ch);
- int judge(char ch)
- {
- switch(ch)
- {
- case 'y':return 0;
- case 'n':return 1;
- default :return 2;
- }
- }
- int main(void)
- {
- char ch;
- int x,i=0;
- while(1)
- {
- printf("\n是否录入y/n:");
-
- ch = getchar();
-
- fflush(stdin);
-
- x = judge(ch);
-
- printf("\n您输入了:%c\n",ch);
-
- if (x==1) // 输入的是n,跳出死循环
- {
- break;
- }
-
- if (x>1) // 输入不是y或n
- {
- printf("输入的值错误!\n") ;
- printf("ch的值为%c,不是y或n,而x的值是%d!",ch,x);
- printf("\n\n---------------------\n");
- }
-
- if (x<1) // 输入的是y,继续循环
- {
- i++;
- printf("目前录入了%d本书!\n\n---------------------\n",i);
- }
- }
-
- printf("总计录入了%d本书!\n",i);
-
- return 0;
- }
复制代码
|
|