scanF后的SegFault?

时间:2010-06-28 20:37:24

标签: c segmentation-fault scanf

#include <stdio.h>
#define TimeConverter 60
#define TempFormula time * time * 4 / time + 2 - 20

double HoursMinToTime(int hour, int min);

double Temperature(double time);

int main()
{
    int hour, min;
    double time, temperature;
    printf("Hours and minutes: ");
    scanf("%d %d", hour, min);
    //Segfault HERE
    time = HoursMinToTime(hour, min);
    temperature = Temperature(time);
    printf("After a %lf hour power failure, the frezer will be %lf degrees", time, temperature);
    return 0;
}
double HoursMinToTime(int hour, int min)
{
    double time = hour * min / TimeConverter;
    return time;              
}
double Temperature(double time)
{
    double temp;
    temp = TempFormula;
    return temp;
}

为什么在scanf之后会出现分段错误?

4 个答案:

答案 0 :(得分:6)

scanf 需要将变量的地址传递给它。用

替换你的scanf
scanf("%d %d",&hour,&min);

你应该好好去。

答案 1 :(得分:4)

您需要传递这些变量的地址。请务必特别注意功能签名,因为最终会得到非常奇怪的结果。另外,为编译器打开所有警告。

scanf("%d %d", &hour, &min); 

答案 2 :(得分:0)

scanf("%d %d", &hour, &min);

答案 3 :(得分:0)

您可以将变量初始化为自己的地址并“修复”:

int hour, min;
hour = (int)&hour;
min = (int)&min;

(我是一个聪明的屁股,顺便说一句。)