| 
 | 
 
 
 楼主 |
发表于 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;
 
 - }
 
  复制代码 
 
 |   
 
 
 
 |