2
votes
#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
Always use compiler warnings, with gcc you use -Wall!! - u0b34a0f6ae
I was using DevCPP on Windows 7 x64, not Linux, although I probably should - Jarred Sumner

4 Answers

6
votes

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

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

You should be good to go.

4
votes

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); 
0
votes
scanf("%d %d", &hour, &min);
0
votes

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.)