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

错在哪里了#include<stdio.h>intmain(){intc;printf("输入:");while(c=getchar()!='y'){switch(c=g... 错在哪里了
#include <stdio.h>
int main()
{
int c;
printf("输入:");
while(c=getchar()!='y')
{
switch(c=getchar())
{
case 'm': printf("星期一");break;
case 't': printf("请继续输入:");
if(c=='u' || c=='U')
printf("星期二");
else if
(c=='h' || c=='H') printf("星期四");
else
printf("error\n");break;
case 'w': printf("星期三");break;
case 'f': printf("星期五");break;
case 's': printf("请继续输入:");
if(c=='a'||c=='A')
printf("星期六");
else if(c=='u'||c=='U')
printf("星期天");
else
printf("error\n");break;
default: printf("error\n");
}
}
}
展开
 我来答
希声和寡
2009-09-05 · TA获得超过2.6万个赞
知道大有可为答主
回答量:6437
采纳率:0%
帮助的人:3408万
展开全部
给你一个改动最少的方案:
#include
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(),这样就多接收了一个字符了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2009-09-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5115万
展开全部
第二次 c=getchar(); 会读入Enter键,用 (void) getchar(); 读掉它。Weekday 首字母 常用 大写,你要判断 大写。

#include <stdio.h>
int main()
{
int c;
printf("input:");
while(1)
{
c=getchar(); (void) getchar();
switch(c)
{
case 'm': case 'M': printf("Monday\n");break;
case 't': case 'T': printf("input second letter:");
c=getchar(); (void) getchar();
if(c=='u' || c=='U')
printf("Tue.\n");
else if
(c=='h' || c=='H') printf("Thu.\n");
else
printf("error\n");break;
case 'w': case 'W': printf("Wed.\n");break;
case 'f':case 'F': printf("Friday\n");break;
case 's':case 'S': printf("input second letter:");
c=getchar(); (void) getchar();
if(c=='a'||c=='A')
printf("Sat.\n");
else if(c=='u'||c=='U')
printf("Sunday\n");
else
printf("error\n");break;
default: printf("error\ninput again\n");
}
printf("input next:\n");
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
情感世界BB
2009-09-04 · TA获得超过2323个赞
知道小有建树答主
回答量:1336
采纳率:100%
帮助的人:551万
展开全部
二楼的,给一个字符串给c,程序就死循环。。猛error...
#include <stdio.h>
int main()
{int c;
printf("请输入y结束\n");
while(1)
{ fflush(stdin);
printf("输入:");
c=getchar();
if(c=='y')break;
if(c=='s')
{fflush(stdin);
printf("请继续输入:");
c=getchar();
switch(c)
{case 'a':printf("星期六\n");break;
case 'u':printf("星期日\n");break;
}
}
if(c=='t')
{fflush(stdin);
printf("请继续输入:");
c=getchar();
switch(c)
{case 'u':printf("星期二\n");break;
case 'h':printf("星期四\n");break;
}
}
switch(c)
{case 'm': printf("星期一\n");break;
case 'w': printf("星期三\n");break;
case 'f': printf("星期五\n");break;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dwthead
2009-09-04 · TA获得超过2309个赞
知道小有建树答主
回答量:1478
采纳率:0%
帮助的人:1916万
展开全部
int c;
也是可以的了 不说了
c=getchar()!='y' 改(c=getchar())!='y'
switch(c)
但是这样有个问题 就是最后一定读入回车 导致输出error
可以加个
#include<conio.h>
改用getch()
最后
printf("请继续输入:"); 的输入语句在哪?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式