一个关于while死循环包含switch语句的问题

「已注销」 2015-12-21 10:43:30
为什么当我注释掉while的时候,正常输入下,default后的语句不会执行。但不注释的时候就会执行default后的语句
int main(int argc, char *argv[])
{
while(1){
int chioce=getchar();
switch (chioce){
case '0':
return 0;//退出程序
case '1':
//开始游戏
printf("Let's begin!\n");
break;
case '2':
//查看上次成绩
break;
case '3':
//输出帮助信息
break;
case '4':
//系统设置
break;
default:
printf("This is a wrong number! Again!\n");
}
}
printf("end error!\n");

system("pause");
return 0;
}
...全文
580 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
脱落叶子 2015-12-28
  • 打赏
  • 举报
回复
if(ch=='\n') continue;
脱落叶子 2015-12-27
  • 打赏
  • 举报
回复
#include<stdio.h> int main(void) { char choice,ch; int n = 3; while(n--) { scanf("%c%c",&choice,&ch); switch (choice) { case '0': return 0;//退出程序 case '1': //开始游戏1 printf("Let's begin!\n"); break; case '2'://查看上次成绩 break; case '3': //输出帮助信息 break; case '4'://系统设置 break; default: printf("This is a wrong number! Again!\n"); break; } } printf("end error!\n"); return 0; }
脱落叶子 2015-12-27
  • 打赏
  • 举报
回复
#include<stdio.h> int main(void) { char choice,ch; int n = 3; while(n--) { scanf("%c%c",&choice,&ch); switch (choice) { case '0': return 0;//退出程序 case '1': //开始游戏1 printf("Let's begin!\n"); break; case '2'://查看上次成绩 break; case '3': //输出帮助信息 break; case '4'://系统设置 break; default: printf("This is a wrong number! Again!\n"); break; } } printf("end error!\n"); return 0; } 这样可以解决
「已注销」 2015-12-25
  • 打赏
  • 举报
回复
引用 11 楼 paschen 的回复:
[quote=引用 10 楼 fengzshizhe 的回复:] [quote=引用 8 楼 seanking1987 的回复:] 我想说的是: LZ如果不会gdb等逐步调试,可以加个printf打印看看调试吧。 问别人再多不如自己学会解决问题
用的是win7平台下Edit Plus+MinGW,没用IDE,不知道怎么在这个平台上用逐步调试。 另外,想知道为什么getchar()和scanf()会接收同一个输入(回车)两次[/quote] 你输入一个数字加回车,缓冲区里会产生这个数字与一个\n,这样第二次循环里还会有一个\n[/quote] 哦~懂了,想起来“缓冲区”这个东西了
「已注销」 2015-12-23
  • 打赏
  • 举报
回复
引用 8 楼 seanking1987 的回复:
我想说的是: LZ如果不会gdb等逐步调试,可以加个printf打印看看调试吧。 问别人再多不如自己学会解决问题
用的是win7平台下Edit Plus+MinGW,没用IDE,不知道怎么在这个平台上用逐步调试。 另外,想知道为什么getchar()和scanf()会接收同一个输入(回车)两次
paschen 2015-12-23
  • 打赏
  • 举报
回复
引用 10 楼 fengzshizhe 的回复:
[quote=引用 8 楼 seanking1987 的回复:] 我想说的是: LZ如果不会gdb等逐步调试,可以加个printf打印看看调试吧。 问别人再多不如自己学会解决问题
用的是win7平台下Edit Plus+MinGW,没用IDE,不知道怎么在这个平台上用逐步调试。 另外,想知道为什么getchar()和scanf()会接收同一个输入(回车)两次[/quote] 你输入一个数字加回车,缓冲区里会产生这个数字与一个\n,这样第二次循环里还会有一个\n
_stonecutter 2015-12-22
  • 打赏
  • 举报
回复
引用 4 楼 fengzshizhe 的回复:
[quote=引用 3 楼 hy09070422 的回复:] [quote=引用 2 楼 fengzshizhe 的回复:] [quote=引用 1 楼 hy09070422 的回复:] 当有while时,实际上执行了两次循环,你输入后,按的回车键被,第二次的getchar接受了,你打印下接收的getchar就知道了。
那如果继续用getchar的话,该怎样处理?[/quote] 个人感觉这种情况不适合用getchar,如果继续用的话,我也不知道怎么办[/quote] 可是我不用getchar,用scanf还是会出现这个问题呢。怎么搞...[/quote] 应该不会啊,你自己多试试,把接受的字符打印出来,慢慢调。
paschen 2015-12-22
  • 打赏
  • 举报
回复

int chioce=getchar();
getchar(); //接收掉\n
chehw_1 2015-12-22
  • 打赏
  • 举报
回复


	char c;
	while(1)
	{
		scanf("%[^\n]%*c", &c);
		switch(c)
		{
			case '0': return 0;
			default:
				printf("%d\n", (int)c);
		}
	}


文东小弟 2015-12-22
  • 打赏
  • 举报
回复
引用 7 楼 paschen 的回复:

int chioce=getchar();
getchar(); //接收掉\n
他的做法是正确的,希望楼主试试,肯定能解决。
seanking1987 2015-12-22
  • 打赏
  • 举报
回复
我想说的是: LZ如果不会gdb等逐步调试,可以加个printf打印看看调试吧。 问别人再多不如自己学会解决问题
「已注销」 2015-12-21
  • 打赏
  • 举报
回复
引用 3 楼 hy09070422 的回复:
[quote=引用 2 楼 fengzshizhe 的回复:] [quote=引用 1 楼 hy09070422 的回复:] 当有while时,实际上执行了两次循环,你输入后,按的回车键被,第二次的getchar接受了,你打印下接收的getchar就知道了。
那如果继续用getchar的话,该怎样处理?[/quote] 个人感觉这种情况不适合用getchar,如果继续用的话,我也不知道怎么办[/quote] 可是我不用getchar,用scanf还是会出现这个问题呢。怎么搞...
_stonecutter 2015-12-21
  • 打赏
  • 举报
回复
引用 2 楼 fengzshizhe 的回复:
[quote=引用 1 楼 hy09070422 的回复:] 当有while时,实际上执行了两次循环,你输入后,按的回车键被,第二次的getchar接受了,你打印下接收的getchar就知道了。
那如果继续用getchar的话,该怎样处理?[/quote] 个人感觉这种情况不适合用getchar,如果继续用的话,我也不知道怎么办
「已注销」 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 hy09070422 的回复:
当有while时,实际上执行了两次循环,你输入后,按的回车键被,第二次的getchar接受了,你打印下接收的getchar就知道了。
那如果继续用getchar的话,该怎样处理?
_stonecutter 2015-12-21
  • 打赏
  • 举报
回复
当有while时,实际上执行了两次循环,你输入后,按的回车键被,第二次的getchar接受了,你打印下接收的getchar就知道了。

69,371

社区成员

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

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