问一个关于用break跳出循环的问题
直接上代码(自己无聊写着玩的,所知知识不多,代码会有点繁杂):
# include
int main(void)
{
while(1)
{
int choose;
int i;
char ch;
int a[20] = {1, 1};
for (i = 2; i <= 19; i++)
a[i] = a[i-2] + a[i-1];
printf("请选择:\n1.查看Fibonacci数列第n项\n2.查看Fibonacci数列前n项\n");
scanf("%d", &choose);
switch (choose)
{
case 1:
int n;
printf("请输入你想查看的项数:\n");
scanf("%d", &n);
if (i = n - 1)
printf("第%d项是:%d \n",n, a[i]);break;
case 2:
int k;
printf("请输入你想查看的项数:\n");
scanf("%d", &k);
for (i = 1; i <= k; i++)
{
printf("%-5d ", a[i]);
if (i%5 == 0)
printf("\n");
}
printf("\n");break;
default:printf("输入有误!\n");break;
}
printf("是否退出(Y/y)?\n");
if((ch = getchar()) == 'y'||(ch = getchar()) == 'Y')
break;
}
return 0;
}
在vc6++中运行的结果是:
-------------------------------------------------------------
请选择:
1.查看Fibonacci数列第n项
2.查看Fibonacci数列前n项
2
请输入你想查看的项数:
13
1 2 3 5 8
13 21 34 55 89
144 233 377
是否退出(Y/y)?
y
请选择:
1.查看Fibonacci数列第n项
2.查看Fibonacci数列前n项
y
请输入你想查看的项数:
1 2 3 5 8
13 21 34 55 89
144 233 377
是否退出(Y/y)?
Press any key to continue-------------------------------------------------------------
我想问的是 为什么要输入两次y才能退出? 求各位指点!!!!
------解决方案--------------------
# include
int main(void)
{
char ch = 'a' ;
while(1)
{
int choose;
int i;
int a[20] = {1, 1};
for (i = 2; i <= 19; i++)
a[i] = a[i-2] + a[i-1];
printf("请选择:\n1.查看Fibonacci数列第n项\n2.查看Fibonacci数列前n项\n");
scanf_s("%d", &choose);
switch (choose)
{
case 1:
int n;
printf("请输入你想查看的项数:\n");
scanf_s("%d", &n);
if (i = n - 1)
printf("第%d项是:%d \n",n, a[i]);break;
case 2:
int k;
printf("请输入你想查看的项数:\n");
scanf_s("%d", &k);
for (i = 1; i <= k; i++)
{
printf("%-5d ", a[i]);
if (i%5 == 0)
printf("\n");
}
printf("\n");break;
default:printf("输入有误!\n");break;
}
printf("是否退出(Y/y)?\n");
ch = getchar();
if(ch == 'y'
------解决方案--------------------
ch == 'Y')
{
return 0;
}
}
return 0;
}
感觉应该是你if((ch = getchar()) == 'y'
------解决方案--------------------
(ch = getchar()) == 'Y')
break;
}不应该这样写。if语句里面没有break吧。。
------解决方案--------------------
这个是getchar()的问题,一定要注意,去查下getchar用法吧,getchar()是读取标准输入里的下一个字符,而之前scanf_s("%d", &choose);完了有个回车,这个回车正被后边的getchar()获取了。。。lz多规范下代码吧,对齐,换行,复用神马的
printf("是否退出(Y/y)?\n");
getchar();
ch = getchar();
if(ch == 'y'
------解决方案--------------------
ch == 'Y')
break;
}
------解决方案--------------------
同上
附代码:
# include
int main(void)
{
int choose ;
int i ;
char ch ;
int a[20]= {1,1};
int n ;
int k ;
for(i=2; i<=19; i++)
a[i]=a[i-2]+a[i-1];
while(1)
{
printf("请选择:\n1.查看Fibonacci数列第n项\n2.查看Fibonacci数列前n项\n");
scanf("%d",&choose);
getchar();
switch(choose)
{
case 1 :
printf("请输入你想查看的项数:\n");