首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为啥while 里的输出 语句执行了2次,

2013-11-04 
为什么while 里的输出 语句执行了2次,。,#include stdio.hint main(){int low0int cap0int num0int

为什么while 里的输出 语句执行了2次,。,
#include <stdio.h>
int main()
{
int low=0;
int cap=0;
int num=0;
int els=0;
int sta=0;
char ch;
printf("请输入 第一个字符:");
scanf("%c",&ch);
while (ch !='.')
{
switch (sta)
{
    case 0:if(ch>='a' && ch<='z') 
               sta=1;
               if (ch>='A' && ch <='Z')
               sta=2;
               if (ch>='0' && ch<'a')
               sta=3;
               else  sta =4;
               printf("执行0 sta %d",sta);
               break;
case 1:low +=1;
       if(ch>='a' && ch<='z') 
               sta=1;
       if (ch>='A' && ch <='Z')
               sta=2;
               if (ch>='0' && ch<'a')
               sta=3;
               else  sta =4;
               printf("执行1 sta %d",sta);
               break;
        case 2:cap +=1;
               if(ch>='a' && ch<='z') 
               sta=1;
               if (ch>='A' && ch <='Z')
               sta=2;
               if (ch>='0' && ch<'a')
               sta=3;
               else  sta =4;
               printf("执行3  sta %d",sta);
               break;
        case 3:num +=1;
               if(ch>='a' && ch<='z') 
               sta=1;
               if (ch>='A' && ch <='Z')
               sta=2;
               if (ch>='0' && ch<'a')
               sta=3;
               else  sta =4;
               printf("执行3 sta %d",sta);
               break;
        case 4:els +=1;
               if(ch>='a' && ch<='z') 
               sta=1;
               if (ch>='A' && ch <='Z')
               sta=2;
               if (ch>='0' && ch<'a')
               sta=3;
               else  sta =4;
               printf("执行4 sta %d",sta);
               break;


        default: printf("输入字符有误");           
}
printf("请输入下一个字符:");
scanf("%c",&ch);

printf("此字符序列小写字母有%d个\n此字符序列大写字母有%d个\n此字符序列数字有%d个\n此字符序列有其他字符%d个\n", low,cap,num,els);
return 0;
}为啥while 里的输出 语句执行了2次,
[解决办法]
有回车, 

printf("请输入下一个字符:");
scanf("%c",&ch);       ---------------- 读了输入buffer里的回车
[解决办法]

引用:
怎么解决这个问题呢??

while (ch !='.' && ch != '\n')
[解决办法]
引用:
怎么解决这个问题呢??


printf("请输入 第一个字符:");
scanf("%c",&ch);
getchar(); 
//因为输入的时候,有一个回车符在输入缓冲区里,可以用这个吃掉回车符,避免影响正常程序
//下面的scanf最好也加上getchar,来吃掉回车符!

[解决办法]
在while循环体内,scanf之前加上这句

fflush(stdin);


或者修改while循环条件

热点排行