|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
主要在于后面的while语句中,当我按Y时正常循环,但是按小写y时却无效,直接退出。调试时则为按任意键退出。。试了很多次,都是这样。#include <stdio.h>
#include <conio.h>
void Hanoi(int n,char A,char B,char C)
{
if (n <= 0)
{
printf("错误!\n");
}
else if (n == 1)
{
printf("把%c移到%c\n", A, C);
}
else
{
Hanoi(n - 1, A, C, B);
printf("把%c移到%c\n",A,C);
Hanoi(n-1,B,A,C);
}
}
void main()
{
int n;
do
{
printf("汉诺塔盘子数:\n");
scanf("%d", &n);
Hanoi(n, 'A', 'B', 'C');
printf("再来一次?(y/s)");
} while (getchar()=='y'|| getchar()=='Y');
}
本帖最后由 sunrise085 于 2020-5-12 10:49 编辑
两个问题:
1、循环内有scanf函数,结束后,缓存区会留下一个回车字符'\n',当你进行while条件判断的时候,getchar得到的是'\n'
2、while条件,写了两个getchar(),若第一次getchar读到的不是‘y',会再次读取一个字符
因为这两个问题,所以当你输入y的时候,第一次读到了'\n'与'y'比较,不符合条件,第二次读到'y'与'Y'比较,也不符合,就退出了。但若输入的是Y,第一次读到了'\n'与'y'比较,不符合条件,第二次读到'Y'与'Y'比较,符合条件,继续进入循环。 #include <stdio.h>
#include <conio.h>
void Hanoi(int n,char A,char B,char C)
{
if (n <= 0)
{
printf("错误!\n");
}
else if (n == 1)
{
printf("把%c移到%c\n", A, C);
}
else
{
Hanoi(n - 1, A, C, B);
printf("把%c移到%c\n",A,C);
Hanoi(n-1,B,A,C);
}
}
void main()
{
int n;
char ch;
do
{
printf("汉诺塔盘子数:\n");
scanf("%d", &n);
getchar();//清除缓存区的'\n'
Hanoi(n, 'A', 'B', 'C');
printf("再来一次?(y/s)");
} while (ch=getchar()=='y'|| ch=='Y');
}
或者把getchar放到循环内 #include <stdio.h>
#include <conio.h>
void Hanoi(int n,char A,char B,char C)
{
if (n <= 0)
{
printf("错误!\n");
}
else if (n == 1)
{
printf("把%c移到%c\n", A, C);
}
else
{
Hanoi(n - 1, A, C, B);
printf("把%c移到%c\n",A,C);
Hanoi(n-1,B,A,C);
}
}
void main()
{
int n;
char ch;
do
{
printf("汉诺塔盘子数:\n");
scanf("%d", &n);
getchar();//清除缓存区的'\n'
Hanoi(n, 'A', 'B', 'C');
printf("再来一次?(y/s)");
ch=getchar();
} while (ch=='y'|| ch=='Y');
}
|
|