错在哪???
/*题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,
则继续判断第二个字母。
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if
语句判断第二个字母。
*/
#include<stdio.h>
int main()
{
char letter;
printf("please input the first letter of oneday!\n");
while((letter=getchar())!='Y') //改为‘y’
{
switch(letter)
{
case 'S':printf("please input second letter\n");
if((letter=getchar())=='a')
{
printf("saturday\n");
}
else if((letter=getchar())=='u')
{
printf("sunday\n");
}
else
{
printf("data error!\n");
}
break;
case 'F':printf("friday\n");
break;
case 'M':printf("monday\n");
break;
case 'T':printf("please input the second letter\n");
if((letter=getchar())=='u')
{
printf("tuesday\n");
}
else if((letter=getchar())=='h')
{
printf("thursday\n");
}
else
{
printf("data error\n");
}
break;
case 'W':printf("wednesday\n");
break;
default:printf("data error!\n");
}
}
}
#include<stdio.h>
int main()
{
char letter;
printf("please input the first letter of oneday!\n");
while((letter=getchar())!='Y') //改为‘y’
{
getchar();
switch(letter)
{
case 'S':printf("please input second letter\n");
if((letter=getchar())=='a')
{
printf("saturday\n");
}
else if(letter=='u')
{
printf("sunday\n");
}
else
{
printf("data error!\n");
}
getchar();
break;
case 'F':printf("friday\n");
break;
case 'M':printf("monday\n");
break;
case 'T':printf("please input the second letter\n");
if((letter=getchar())=='u')
{
printf("tuesday\n");
}
else if(letter=='h')
{
printf("thursday\n");
}
else
{
printf("data error\n");
}
getchar();
break;
case 'W':printf("wednesday\n");
break;
default:printf("data error!\n");
}
}
}
满意请评分打赏{:5_92:} 本帖最后由 orino 于 2016-10-17 08:22 编辑
有不少问题,第一,在使用l=getchar()之后,按回车键是会产生换行回车两个字符,回车输入字符后还会剩下一个换行字符留在输入区,这时马上用l=getchar()是会捕获这个换行字符而不是你想输入的字符,所以如果一定要每次输入后按回车键,那么就请在每次使用后单独用一个getchar()吞掉这个多余的字符;第二点,照你的第二个字母判断方法来看,你的else if里的字符在第一次输入时都不会被匹配,所以推荐在每个case里只用一个l=letchar(),然后对l判断. 本帖最后由 huabcdf 于 2016-10-13 19:01 编辑
二个问题,一是没过滤掉加车,二是判断时不能重复从缓冲区提取字符。
更改如下,若有不对,请指正。
#include<stdio.h>
int main()
{
char letter;
printf("please input the first letter of oneday!\n");
while((letter=getchar())!='Y') //改为‘y’
{
fflush(stdin);//清空缓冲区
switch(letter)
{
case 'S':printf("please input second letter\n");
letter=getchar();//只能从缓冲区提取一次字符
//fflush(stdin);//清空缓冲区
if(letter=='a')
{
printf("saturday\n");
}
else if(letter=='u')
{
printf("sunday\n");
}
else
{
printf("data error!\n");
}
break;
case 'F':printf("friday\n");
break;
case 'M':printf("monday\n");
break;
case 'T':printf("please input the second letter\n");
letter=getchar();
//fflush(stdin);//清空缓冲区
if(letter=='u')
{
printf("tuesday\n");
}
else if(letter=='h')
{
printf("thursday\n");
}
else
{
printf("data error\n");
}
break;
case 'W':printf("wednesday\n");
break;
case '\n':break;//输入第二个字符时若不清空缓冲区会把回车读到下轮的letter.
default:printf("data error!\n");
}
}
} orino 发表于 2016-10-13 16:57
满意请评分打赏
收到鱼币了吗? huabcdf 发表于 2016-10-13 18:59
二个问题,一是没过滤掉加车,二是判断时不能重复从缓冲区提取字符。
更改如下,若有不对,请指正。
#inc ...
谢谢!!!
网上说fflush(stdin);此函数仅适用于部分编译器(如VC6) 本帖最后由 orino 于 2016-10-17 08:21 编辑
嗯,原来说的顺序反了,准确的是先回车(13,\r)再换行(10,\n)已经修正了
页:
[1]