2010-06-28 67 views
2
#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後出現分段錯誤?scanf之後的SegFault?

+2

始終使用編譯器警告,與gcc你使用'-Wall'! – u0b34a0f6ae 2010-06-28 20:45:32

+0

我在Windows 7 x64上使用DevCPP,而不是Linux,儘管我可能應該使用 – 2010-06-28 21:26:14

回答

6

scanf函數需要變量的地址傳遞給它。用

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

你應該很好走。

+0

我以兩種不同的方式犯了同樣的錯誤,請參閱上一個問題,我問 – 2010-06-28 20:39:55

4

您需要傳遞這些變量的地址。請務必特別注意功能簽名,因爲最終會出現非常奇怪的結果。此外,請爲您的編譯器打開所有警告。

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

你可以初始化變量自己的地址和「修正」這樣的:

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

(我是一個聰明的笨蛋,順便說一句。)

+2

根本不便攜。 int不一定能持有指針。 – 2010-06-28 21:02:30