views:

74

answers:

4
#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;
}

Why does this have a segmentation fault when after scanf?

+4  A: 

You need to pass the address of these variables. Make sure to pay special attention to function signatures because you can end up with very strange results. Also, turn all warnings on for your compiler.

scanf("%d %d", &hour, &min); 
BobbyShaftoe
+6  A: 

Scanf requires the addresses of the variables to be passed to it. Replace yout scanf by

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

You should be good to go.

chaitanya
wowww i made the same mistake twice in different ways, see previous question i asked
Indebi
A: 
scanf("%d %d", &hour, &min);
anthony
A: 

You could initialize your variables to their own addresses and "fix" this:

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

(I am being a smart-ass, btw.)

Nico
Not at all portable. int cannot necessarily hold a pointer.
R..