在说明之前,想请大家看看这个程序有没有问题?
#include <stdio.h>
int main()
{
char a,b;
printf("能否被3整除?(Y/N)\n");
scanf("%c",&a);
printf("个位是否为7?(Y/N)\n");
scanf("%c",&b);
if(a == 'Y')
if(b == 'Y')
printf("这个数符合能被3整除且个位数为7");
else
{
printf("这个数不符合能被3整除且个位数为7");
}
return 0;
}
bug 1:回车被作为一个字符去输入
当你运行时会发现输入Y回车后,程序会直接结束,而不是让你输入b的值,这是因为回车被作为一个字符去输入,导致只输入一个字符程序就运行结束了。
解决方案:用getchar();把回车给过滤掉
#include <stdio.h>
int main()
{
char a, b;
printf("能否被3整除?(Y/N)\n");
scanf("%c", &a);
getchar();
printf("个位是否为7?(Y/N)\n");
scanf("%c", &b);
if (a == 'Y')
if (b == 'Y')
printf("这个数符合能被3整除且个位数为7\n");
else
{
printf("这个数不符合能被3整除且个位数为7\n");
}
return 0;
}
这样修改,代码就可以正常运行了,但还是有问题存在。
bug 2:else始终与最接近它的if匹配
当你运行输入‘N’‘Y’时,你会发现不会输出任何结果,这是因为下面的if优先和else匹配形成一个分支语句,所以上面的if条件为假时,会直接跳过下面的if else语句,加上大括号后代码就是
#include <stdio.h>
int main()
{
char a, b;
printf("能否被3整除?(Y/N)\n");
scanf("%c", &a);
getchar();
printf("个位是否为7?(Y/N)\n");
scanf("%c", &b);
if (a == 'Y')
{ if (b == 'Y')
{
printf("这个数符合能被3整除且个位数为7\n");
}
else
{
printf("这个数不符合能被3整除且个位数为7\n");
}
}
return 0;
}
你会发现加上大括号后,代码就更加清晰了,错误自然而然就显现出来了。
所以我们在使用if语句时尽量将大括号打出来,正确的写法如下:
#include <stdio.h>
int main()
{
char a, b;
printf("能否被3整除?(Y/N)\n");
scanf("%c", &a);
getchar();
printf("个位是否为7?(Y/N)\n");
scanf("%c", &b);
if (a == 'Y')
{ if (b == 'Y')
{
printf("这个数符合能被3整除且个位数为7\n");
}
}
else
{
printf("这个数不符合能被3整除且个位数为7\n");
}
return 0;
}
将else移出上面if语句块即可。
好了,本期分享就到这,谢谢大家的观看,不妨点个赞再走吧