求助help
#include <stdio.h>int main()
{
int a,b;
char xingbie,yundong,yinshi;
float h;
scanf("%d%d%c%c%c",&a,&b,&xingbie,&yundong,&yinshi);
if(xingbie=='F')
h=(0.923*a+b)/2;
else h=(a+b)*0.54;
if(yundong=='Y') h=h*1.02;
if(yinshi=='Y') h=h*1.015;
printf("%.2f",h);
return 0;
}
请问这个程序为什么会只有else语句执行,C语言。 关于C语言程序只执行else语句的问题
这是因为在C语言中,使用scanf函数读取字符时会遇到一个潜在的问题。当我们使用%c格式符来读取字符时,它会读取输入缓冲区中的下一个字符,包括空格、制表符和换行符。这可能导致意外的行为。
在你提供的代码中,读取xingbie、yundong和yinshi这三个字符时,可能会受到之前scanf的影响。如果在读取a和b后没有清除输入缓冲区,那么xingbie很可能会受到上一个scanf的干扰而被赋予意外的值。
为了解决这个问题,你可以在每次读取字符之前加上一个空格,让scanf跳过可能残留在缓冲区中的空白符。修改后的代码如下所示:
#include <stdio.h>
int main() {
int a, b;
char xingbie, yundong, yinshi;
float h;
scanf("%d %d %c %c %c", &a, &b, &xingbie, &yundong, &yinshi);
if (xingbie == 'F')
h = (0.923 * a + b) / 2;
else
h = (a + b) * 0.54;
if (yundong == 'Y')
h = h * 1.02;
if (yinshi == 'Y')
h = h * 1.015;
printf("%.2f", h);
return 0;
}
通过在scanf格式字符串中加入空格,可以避免上一个输入对后续字符输入的干扰,从而确保程序能够按预期执行。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} 这个程序中只有else语句执行的原因是在使用scanf函数读取字符时,可能会出现换行符的问题。在你的代码中,scanf函数读取了两个整数后,接着读取字符时,会读取到之前输入的换行符,而不是你期望的字符。因此,else语句中的代码会被执行。
要解决这个问题,你可以在读取字符之前使用一个空格字符来清除换行符。修改scanf函数的调用如下:
scanf("%d%d %c%c%c",&a,&b,&xingbie,&yundong,&yinshi);
这样,空格字符将会吸收掉换行符,然后正确读取字符,使得你的if语句能够按照预期执行。
页:
[1]