为什么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;
}
[解决办法]
有回车,
printf("请输入下一个字符:");
scanf("%c",&ch); ---------------- 读了输入buffer里的回车
[解决办法]
while (ch !='.' && ch != '\n')
[解决办法]
printf("请输入 第一个字符:");
scanf("%c",&ch);
getchar();
//因为输入的时候,有一个回车符在输入缓冲区里,可以用这个吃掉回车符,避免影响正常程序
//下面的scanf最好也加上getchar,来吃掉回车符!
[解决办法]
在while循环体内,scanf之前加上这句
fflush(stdin);
或者修改while循环条件