2015-10-01 129 views
0

因此,作爲C相當新手的人,我遇到了我的第一個SIGSEGV錯誤。 它出現在一個簡短的C程序中,意思是「猜數字」遊戲。它由一個自定義函數組成,該函數將兩個數字和一個do-while循環與內部輸入進行比較。 開始和do-while循環:SIGSEGV短C代碼錯誤

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

專業提示:始終編譯時啓用警告(例如gcc -Wall ...),編譯器會高興地指出這樣的簡單錯誤,爲您節省大量時間和悲傷。

+0

非常感謝您的快速幫助;問題解決了,但是讓我困惑的是,我的c編輯器(「Dev-cpp」,C++和c編譯器)中的「調試」功能似乎也會導致sigsegv;但它停止出現,現在正常工作。 –