|
5鱼币
#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格式字符串中加入空格,可以避免上一个输入对后续字符输入的干扰,从而确保程序能够按预期执行。
球一个最佳答案谢谢啦!这对我非常重要!  
|
最佳答案
查看完整内容
关于C语言程序只执行else语句的问题
这是因为在C语言中,使用scanf函数读取字符时会遇到一个潜在的问题。当我们使用%c格式符来读取字符时,它会读取输入缓冲区中的下一个字符,包括空格、制表符和换行符。这可能导致意外的行为。
在你提供的代码中,读取xingbie、yundong和yinshi这三个字符时,可能会受到之前scanf的影响。如果在读取a和b后没有清除输入缓冲区,那么xingbie很可能会受到上一个scanf的干扰而被赋予意外的值。
为 ...
|