一个关于switch的小程序,实在看不出什么毛病啊??为什么总是不对呢

roro00 2003-11-12 04:51:58
/*今天下午编了几个小程序,但其中有个程序却总是出错,
*我试了很久还是找不出问题所在,百思不得其解啊!
*把程序精简了一下,只保留了有问题的部分,贴在此处,请大家不吝赐教!
*(我用的是visual c++ 6.0,建立的Win32 Console Application。 )
*
*/

#include "stdio.h"

main()
{
char t;

t=getchar();

switch(t)
{
case 'S':
printf("Please enter the second letter:\n");

if (getchar()=='u')
{
printf("Sunday\n");
}

default:
printf("Wrong input!\n");
}
}

每次运行后,输入S,按enter之后,就会出现:

Please enter the second letter:
Wrong input!
Press any key to continue

这样程序就算结束了,根本不给我输入第二个字符的机会。
这究竟是为什么?

小女子在此谢过了先~~~






...全文
184 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
roro00 2003-11-13
  • 打赏
  • 举报
回复
好像还有一个办法可以清理输入缓冲区:
while (getchar()!=EOF&&ch!='\n')
;

这是一本书上面写的。^_^
总的来说觉得用getchar好麻烦,有的地方很难控制。
不如用getch省事儿啊!不用输入后面的enter,也不会有这么多问题了。方便!
Meyer 2003-11-12
  • 打赏
  • 举报
回复
首先你的switch写的是有问题,按你的逻辑来看应该有break;

t=getchar();
//你执行上一句的时候,必须输入s和一个回车键;

switch(t)
{
case 'S':
printf("Please enter the second letter:\n");

if (getchar()=='u')
//你这次读到的就是那个多余的回车,如果在此之前清除输入缓冲区就可以了。
{
printf("Sunday\n");
}

default:
printf("Wrong input!\n");
}
liao2001 2003-11-12
  • 打赏
  • 举报
回复
小女子?
看来就我看到这几个字了,我的观察力还是不错的嘛
daizh 2003-11-12
  • 打赏
  • 举报
回复
to roro00(橙子冰):
“我很想找些讲的比较深,把程序的运行机制讲的比较透的书。做程序时喜欢找问题的根源”
^_^,很佩服你的钻研精神,你可以现看看《c++ primer》然后,再看《深入c++对象模型》这本书。
roro00 2003-11-12
  • 打赏
  • 举报
回复
proware的说法也可以,但是我觉得不是最合适的编写程序的方法吧。
嗯,照daizh的做法是完全正确的。
roro00 2003-11-12
  • 打赏
  • 举报
回复
to daizh:
谢谢!
像fflush(stdin)这种东东一般的书上都没有讲诶,
怎样才能学到像这样的比较深层的东东呢?

我很想找些讲的比较深,把程序的运行机制讲的比较透的书。
做程序时喜欢找问题的根源


proware 2003-11-12
  • 打赏
  • 举报
回复
在t=getchar()
后加getchar();
其目的是吃掉你输入字符后的回车符
daizh 2003-11-12
  • 打赏
  • 举报
回复
呵呵,按我上面说的做就可以了
roro00 2003-11-12
  • 打赏
  • 举报
回复
fflush(stdin);//<-----刷新输入缓冲,否则输入流中的回车符会被下面的getchar()捕获,而不执行了。

你真行!但是,
只有这一种办法么?
proware 2003-11-12
  • 打赏
  • 举报
回复
其目的是吃掉你输入字符后的回车符
roro00 2003-11-12
  • 打赏
  • 举报
回复
对,是应该加break。但是仍然有问题。
程序运行出现
Please enter the second letter:
Press any key to continue
程序就结束了
proware 2003-11-12
  • 打赏
  • 举报
回复
在t=getchar()
后加getchar();
daizh 2003-11-12
  • 打赏
  • 举报
回复
#include "stdio.h"

main()
{
char t;

t=getchar();

switch(t)
{
case 'S':
fflush(stdin);//<-----刷新输入缓冲,否则输入流中的回车符会被下面的getchar()捕获,而不执行了。
printf("Please enter the second letter:\n");

if (getchar()=='u')
{
printf("Sunday\n");
}
break;//<-------跳出它的判断,^_^,自己在想想,看看书上怎么说的

default:
printf("Wrong input!\n");
}
}

proware 2003-11-12
  • 打赏
  • 举报
回复
即在第一个 case 结束是加 break
roro00 2003-11-12
  • 打赏
  • 举报
回复
刚才发现如果输入Su,再按enter键,出现
Please enter the second letter:
Sunday
Wrong input!
Press any key to continue

哦,明白了一点点。
用getchar要输入字符以后,按enter键,把输入的两个字符都送回去
proware 2003-11-12
  • 打赏
  • 举报
回复
在default上面家break

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧