题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

不知这样做是否可以,但我无法把所有的星期数输出来,请高手试一下,在原有的框架下,适当修改一下,把所有的星期数输出来。... 不知这样做是否可以,但我无法把所有的星期数输出来,请高手试一下,在原有的框架下,适当修改一下,把所有的星期数输出来。 展开
 我来答
希声和寡
推荐于2016-12-01 · TA获得超过2.6万个赞
知道大有可为答主
回答量:6437
采纳率:0%
帮助的人:3407万
展开全部
给你一个改动最少的方案:
#include<stdio.h>
main()
{
char letter;
printf("please input the first letter of someday\n");
while((letter=getchar())!='y')
{
fflush(stdin);//这儿加一个强制键盘缓冲区清空处理,用以清空while判断里输入时最后所带的回车
switch (letter)
{
case 's':printf("please input second letter:\n");
if ((letter=getchar())=='a')printf("saturday\n");
else if (letter=='u')printf("sunday\n"); //这儿直接判断letter,而不需要再判断letter=getchar()
else printf("Data error\n");break;
case 'f':printf("friday\n");break;
case 'm':printf("monday\n");break;
case 't':printf("please input second letter:\n");
if ((letter=getchar())=='u')printf("tuesday\n");
else if (letter=='h')printf("thursday\n"); //这儿直接判断letter,而不需要再判断letter=getchar()
else printf("Data error\n");break;
case 'w':printf("wednesday\n");break;
default:printf("error\n");
}
fflush(stdin);//这儿加一个强制键盘缓冲区清空处理,用以清空case语句里输入时最后所带的回车
}
}

上面各位说的关于强制键盘缓冲区清空处理的都是对的,主要就是要注意输入数值时,回车的影响。

但是上面各位的改造都过于复杂,主要是对于if/else语句的执行范围认识有误,
对于
if ((letter=getchar())=='a')printf("saturday\n");
这个语句,即使当前输入的第2个字符不是'a',这里if判断里的letter=getchar()也会执行的,只是=='a'判断为假,所以if分支不执行。
所以其实用户输入的第2个字符已经被接收了,所以当前letter中已经存放了用户输入的第2个字符。
因此,后面的else if需要直接判断letter,而不需要再判断letter=getchar(),这样就多接收了一个字符了
求没被占用111
2021-03-13
知道答主
回答量:3
采纳率:0%
帮助的人:1429
展开全部
dic1 = {"星期一": "mo", "星期二": "tu", "星期三": "we", "星期四": "th", "星期五": "fr", "星期六": "sa", "星期日": "su"}
s1 = input("请输入第一个字母:")
li = []
for i in dic1.items():
if s1 == i[1][0]:
li.append(i[0])
if len(li) == 1:
print(li[0])
elif len(li) == 2:
s2 = input("请输入第二个字母:")
for i in li:
if s2 == dic1[i][1]:
print(i)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xrayron
2009-03-31 · TA获得超过1052个赞
知道大有可为答主
回答量:781
采纳率:0%
帮助的人:942万
展开全部
记得排版要给自己也看的清楚

#include<stdio.h>
int main()
{
char key;
while(1)
{
printf("please input the firet letter:");
key = getchar();
if(key == 'y')
break;
fflush(stdin); //刷新缓冲区,这个很重要
switch(key)
{
case 'f': printf("Friday\n"); break;
case 'w': printf("Wednesday\n"); break;
case 'm': printf("Monday\n"); break;
case 't':
case 's': //两个判断写在一起,节省代码量
{
printf("please input the second letter:");
char temp = getchar();
if(temp == 'h')
printf("Thusday\n");
else if(temp == 'a')
printf("Saturday\n");
else if(temp == 'u')
{
if(key == 's')
printf("Sunday\n");
else
printf("Tuesday\n");
}
else
printf("there is no such a day!\n");
break;
}
default:
printf("there is no suach a day!\n");
}
fflush(stdin); //随时记得清空缓冲区内容,不然getchar()会接受不可预知转义字符
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
元容j9
2009-03-31 · 超过17用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:0
展开全部
这么写换行符'\n'将会让你遇到很大的麻烦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
phonsony
2009-03-31 · TA获得超过664个赞
知道小有建树答主
回答量:438
采纳率:0%
帮助的人:302万
展开全部
#include<stdio.h>
main()
{
char letter;
printf("please input the first letter of someday\n");
while(letter!='y')
{
switch (letter=getchar())//每次判断都要多加一个getchar();用它来接收回车符。
{
case 's':getchar();printf("please input second letter:\n");
letter=getchar();getchar();
if (letter=='a')printf("Saturday\n");
else if (letter=='u')printf("Sunday\n");
else printf("Data error\n");break;
case 'f':getchar();printf("Friday\n");break;
case 'm':getchar();printf("Monday\n");break;
case 't':getchar();printf("please input second letter:\n");
letter=getchar();getchar();
if (letter=='u')printf("Tuesday\n");
else if (letter=='h')printf("Thursday\n");
else printf("Data error\n");break;
case 'w':getchar();printf("Wednesday\n");break;
default:;printf("Error");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式