Итак, как человек, который довольно новичок в 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 Я не уверен, если это поможет, если больше информации необходимы для отладки, пожалуйста, скажите мне)
Большое спасибо за вашу быструю помощь; Проблема была решена, но меня немного смутило, что функция «debug» в моем c-редакторе («Dev-cpp», C++ и c-компилятор) также иногда вызывала сигшев; однако он перестает появляться и теперь работает правильно. –