2015-10-01 3 views
0

Итак, как человек, который довольно новичок в C, я наткнулся на свою первую ошибку SIGSEGV. Он появился в короткой программе на C, предназначенной для игры «угадай номер». Он состоит из самоопределяемой функции, которая сравнивает два числа и цикл do-while с входом внутри него. Начало и делать-то время цикла:SIGSEGV Короткий код ошибки

#include<stdio.h> 

int checkNum(int num1, int num2); //See below for explanation 

int main(void) { 
    int input=0, rand=3; //"Random" number has fixed value for testing 

    do { 
     printf("Enter number from 0-10: "); //There is not actual range yet 
     scanf("%d",input); //Get input 
    } while(checkNum(input, rand)); //Checks if difference != 0 
} 

Функция для сравнения:

//Function for comparing input with "random" number 
int checkNum(int num1,int num2) { //The two numbers that get compared; First one: input, Second one: "random" rumber 
    if(num1==num2) { 
     printf("Correct. The random number was %d",num2); 
    } else if(num1<num2) { 
     printf("Wrong. The random number is bigger."); 
    } else if(num1>num2) { 
     printf("Wrong. The random number is smaller."); 
    } 
    return num2-num1; //Return the difference, leads to 0 if equal 
} 

Я подозреваю, что ошибка была в функции, вызванной отсутствием использования указателя, но, как насколько я понимаю указатели, они здесь не кажутся необходимыми: я не изменяю одну переменную в функции, а возврат только вычитает два значения (которые я даю).

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

ответ

5

Это:

scanf("%d",input); //Get input 

должно быть:

scanf("%d",&input); //Get input 
       ^^^ 

Pro tip: всегда компилируется с включенными предупреждениями (например, gcc -Wall ...), и компилятор с радостью укажет на простые ошибки, такие как это, что сэкономит вам много времени и печали.

+0

Большое спасибо за вашу быструю помощь; Проблема была решена, но меня немного смутило, что функция «debug» в моем c-редакторе («Dev-cpp», C++ и c-компилятор) также иногда вызывала сигшев; однако он перестает появляться и теперь работает правильно. –

Смежные вопросы