C编程基本问题

时间:2011-07-02 22:38:44

标签: c dev-c++

#include <stdio.h>
#include <math.h>


int main (void)
{
    float inches;
    printf("Enter the number of inches\n");
    scanf("%f\n",&inches);


    float feet;
    float cm;
    float yards;
    float meter;

    feet = 12 * inches;
    cm = 2.54 * inches;
    yards = 36 * inches;
    meter = 39.37 * inches;

    printf("Amount in feet: %f\n", &feet);
    printf("Amount in cm:   %f\n", &cm);
    printf("Amount in yards: %f\n", &yards);
    printf("Amount in meters: %f\n", &meter);




   getchar();

   return 0;

}

我正在使用Dev c ++

问题是我在C中工作的问题。基本上以英寸为单位输入数字,然后以cm,码,米和英尺打印数量。这给了我0.0000或其他所有的东西或实际上它的时间。我不能保持屏幕,我认为这是getchar()的目的,但我一定是错了。任何帮助都很棒。谢谢!

编辑1

在我放入内容之后,将scc ++保留在屏幕上而不是关闭时怎么样?当屏幕弹出时,我还必须在它返回之前输入2个值?为什么?

4 个答案:

答案 0 :(得分:1)

你试图将花车的地址打印为花车,你只想这样说:

printf("Amount in feet: %f\n", feet);

请注意&上缺少地址(feet)运算符。您希望对其他printf来电应用类似的更改。

答案 1 :(得分:1)

两个问题:

  1. 使用scanf()的常见问题,因为它在未读取的数字之后留下换行符,并且后面的读取操作(此处为getchar())读取它。
  2. 您不应将指针传递给printf(),而应传递实际值。

答案 2 :(得分:0)

使用printf,您不会为其指定float值的地址,只需为其指定值即可。从&来电中删除printf

您需要scanf中的地址,因为该函数会修改您传入的变量,但printf只需要这些值。实际上,printf实际上是将指针重新解释为浮点数,这就是显示垃圾值的原因。

答案 3 :(得分:0)

关于我无法保持屏幕,对于每个试图直接从IDE(尤其是Dev-C ++)在图形环境中执行控制台程序的人来说,这是一个常见的问题。问题是没有I / O控制台,然后只提供了一个程序正在运行的时间,并且因为程序很快,如果你在上次输入和输出后没有添加暂停,你就不会有时间阅读输出。

许多MS Windows Dev-C ++用户添加了一个恐怖的system("pause")。我总是建议,如果Dev-C ++无法通过“即使在程序结束后保持打开”选项为I / O提供控制台,那么最好打开一个shell(Windows上的cmd或powershell)和直接从那里运行你的程序。

关于输入问题,不幸的扫描有几个缓冲问题,因为对于给定格式无法识别的输入不会被丢弃并准备好进行下一次读取。 E.g。

scanf("%f", &aFloat);
scanf("%f", &theNextFloat); // in your case you have the extra getchar();
如果您将1.25 4.5写为第一个输入,

将不会停止第二个scanf,因为4.5已经可用于下一个scanf。在你的情况下,它是一个留在缓冲区中的换行符,因为getchar找到它,它不需要等待输入。你可以用一个 而是while( getchar() != EOF ) ;,然后退出,您需要按Ctrl-D。