的scanf()不会提示输入标准输入

问题描述:

#include <stdio.h> 

int main(void) { 
    float base, height, hyp; 

    printf("input base of triangle:\n"); 
    scanf("%f", base); 

    printf("input height of triangle:\n"); 
    scanf("%f", height); 

    printf("input hypotenuse of triangle:\n"); 
    scanf("%f", hyp); 

    float perimeter = base + height + hyp; 

    printf("the perimeter of your triangle is: %f\n", perimeter); 



    return 0; 
} 

我通过ideone.com运行此,它显示了成功,那么标准输入为空,则在标准输出它打印不带数字我所有的print语句的scanf()不会提示输入标准输入

+2

'的scanf( “%F”,基地);' - >'的scanf( “%F”,&base);' – BLUEPIXY

+5

ideone永远等待你的输入,键入所有输入到标准输入框中 – Danh

+0

在运行程序之前在输入**中键入内容,您将得到类似于'运行时错误\t时间:0内存:2172信号:11',因为您错误地调用了'scanf'。 – 4386427

scanf需要一个指针数据类型,您应该使用&通过您的变量的地址:

scanf("%f", &base); 
scanf("%f", &height); 
scanf("%f", &hyp); 

要添加一些错误检查可能是有用的,是这样的:

if(scanf("%f", &base) != 1) //number of items scanned is expected to be 1 
    //process error.. 
//etc 
+0

...并添加代码以检查扫描是否成功,然后依赖具有适当值的变量 – unwind

+0

@ 4386427当scanf失败时返回负值 –

+1

@GillBates:否则返回扫描的项目数。输入不是一个浮点数,它返回0.通过验证结果是否与期望的项目数完全一致来检查是否成功。 –

这是因为ideone是而不是的互动。不像在命令行中运行程序,ideone需要你提供所有的前期投入在“输入”选项卡:

Ideone

你需要运行程序之前输入的所有数据。

P.S.一旦你这样做,注意你有没有未定义的行为,因为你传递的值是scanf而不是指针。解决这个问题的最好方法是在编译C代码时选择“C99 strict”选项。这将打破你的编译以下警告:

prog.c:7:11: error: format '%f' expects argument of type 'float *', but argument 2 has type 'double' [-Werror=format=]

scanf("%f", base);