SegFault после сканирования?

#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?


person Jarred Sumner    schedule 28.06.2010    source источник
comment
Всегда используйте предупреждения компилятора, с gcc вы используете -Wall!!   -  person u0b34a0f6ae    schedule 29.06.2010
comment
Я использовал DevCPP на Windows 7 x64, а не на Linux, хотя, вероятно, мне следует   -  person Jarred Sumner    schedule 29.06.2010


Ответы (3)


scanf требует передачи адресов переменных. Замените ваш scanf на

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

Тебе должно быть хорошо идти.

person chaitanya    schedule 28.06.2010
comment
вау, я сделал одну и ту же ошибку дважды по-разному, см. предыдущий вопрос, который я задал - person Jarred Sumner; 29.06.2010

Вам нужно передать адрес этих переменных. Обязательно уделяйте особое внимание сигнатурам функций, потому что вы можете получить очень странные результаты. Кроме того, включите все предупреждения для вашего компилятора.

scanf("%d %d", &hour, &min); 
person BobbyShaftoe    schedule 28.06.2010

Вы можете инициализировать свои переменные по их собственным адресам и «исправить» это:

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

(Я умница, кстати.)

person Nico    schedule 28.06.2010