我正在尝试从书中学习c,但是我很困惑 我做了以下事情:
#include <stdio.h>
#include <math.h>
int main(void)
{
int metrisi=getchar();
putchar (metrisi);
float proi=(metrisi-80)/40*1.5;
float apog=(metrisi-80)/40*1.4;
float brady=(metrisi-80)/40*1.4;
{
printf("%5.0f %5.0f %5.0f\n", proi,apog,brady);
}
return 0;
}
输出为
C Online Compiler [gcc-6.3]
Copyright (c) Free Software Foundation, Inc.
Compiling your program...
Build completed successfully!
Running your program...
\xff...
The program executed successfully!
能帮我吗?用户无输入,无输出。 谢谢
答案 0 :(得分:0)
几个问题:
int metrisi=getchar();
这会将您输入的第一个字母的 ASCII值放入metrisi。
通过减去48可以获得十进制的十进制值,但这是非常不安全的-如果您输入数字以外的数字会发生什么?
编辑:正如David指出的那样,从技术上讲,这种减法并不安全。但是,由于要对输入值进行一些算术运算,因此确保只接受数字作为输入是明智的。
无论如何,下一个问题在您的printf中:
printf("%5.0f %5.0f %5.0f\n", proi,apog,brady);
在此指定在小数点左边输出5位数字,在小数点后面输出0位数字。也许您想要这样:
printf("%.5f %.5f %.5f\n", proi,apog,brady);
这里(我猜)还有一个问题:
float proi=(metrisi-80)/40*1.5;
此表达式可能会产生非常令人惊讶的结果。这样做的原因是在C中有一个叫做operator precedence的东西,而且并不总是直观的。
您可以尝试以下方法:
float proi=(metrisi-80)/(float)40*1.5;
或
float proi=(metrisi-80)/40.0*1.5;