我是c语言的新手,我的程序正在运行,但没有任何输出

时间:2018-12-13 22:48:17

标签: c

我正在尝试从书中学习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!

能帮我吗?用户无输入,无输出。 谢谢

1 个答案:

答案 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;