您的代码中有两个主要问题。
(1) 不要在格式说明符中包含'\n'。 "%f" 等格式说明符默认跳过 空格。所以使用(以#2为准):
scanf("%f", &base)
(2)通过检查所用输入函数的返回来验证每个用户输入。如果用户按'R' 我的错误到达'4' 键会发生什么?那会发生什么? (如果它是第一个数字 - 未定义的行为,因为您盲目地假设输入成功)。相反,验证返回,例如
if (scanf("%f", &base) != 1) {
fputs ("error: invalid float - base.\n", stderr);
return 1;
}
总而言之,你可以这样做:
#include <stdio.h>
int main (void)
{
float base, height, area;
fputs ("area of triangle=?\nbase=", stdout);
if (scanf("%f", &base) != 1) {
fputs ("error: invalid float - base.\n", stderr);
return 1;
}
fputs ("height=", stdout);
if (scanf("%f", &height) != 1) {
fputs ("error: invalid float - height.\n", stderr);
return 1;
}
area = base * height / 2.;
printf ("\narea = %f\n", area);
return 0;
}
(注意: nit - 如果不涉及转换,则无需使用可变参数 printf 函数,只需使用 fputs (或者如果您想要默认值,只需使用 puts '\n' 最后)。一个好的编译器会为你优化这个,但显示出对什么是适合这项工作的工具的理解是有好处的)
使用/输出示例
$ ./bin/trianglearea
area of triangle=?
base=3
height=4
area = 6.000000
查看一下,如果您还有其他问题,请告诉我。