本帖最后由 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;
}
|