2016-12-16 106 views
-3

我想在c中做一個簡單的計算器,因爲我想測試我的編程技巧。我不斷收到錯誤。C編程計算

#include <stdio.h> 

int calc() 
{ 
    int *fnum; 
    int *snum; 
    printf("Enter your First Number: "); 
    scanf("%d", fnum); 

    printf("Enter your Second Number: "); 
    scanf("%d", snum); 

    int answer = *fnum + *snum; 
    printf("%d", answer); 
    return 0; 
} 

int main() 
{ 
    int *calcType; 
    printf("Type of Calculation: 1=A, 2=S, 3=M, 4=D: "); 
    scanf("%d", calcType); 
    if (*calcType == 1) 
    { 
     calc(); 
    } 
    return 0; 
} 

但後來我得到這個錯誤:

Segmentation fault (core dumped) 

請幫幫忙,我不知道這意味着什麼。

+0

所以,你想知道那個錯誤是什麼意思?查看它! – usr2564301

+0

從所有變量中刪除'*'開始。你不需要聲明指向int的指針;你需要int變量。你的C真的很生疏;你應該回到你的書或向你的老師尋求幫助。 –

+0

考慮'int x; some_function(x);''x'沒有被初始化也沒有被賦值。 'some_function()'接受什麼值?它沒有被定義,所以會導致問題。 'scanf(「%d」,calcType)發生同樣的事情;','calcType'還沒有被賦值,也沒有初始化。是一個沒有賦值的指針。 – chux

回答

3

您調用了scanf將一個整數讀入到calcType指向的內存中,但您從未將calcType設置爲指向有效地址。

2

snum和fnum(int *指針)指向哪裏?您必須聲明一個變量並將其地址(通過參考運算符&)傳遞給scanf。

代碼應該是這樣的

int calc(){ 
    int fnum; 
    int snum; 
    printf("Enter your First Number: "); 
    scanf("%d", &fnum); 

    printf("Enter your Second Number: "); 
    scanf("%d", &snum); 

    int answer = fnum + snum; 
    printf("%d", answer); 
    return 0; 
} 

還與calcType指針同樣的問題。

1

你應該輸入查詢int S,不int*int指針):

int fnum; /* This is now an int */ 
int snum; /* so is this */ 
printf("Enter your First Number: "); 
scanf("%d", &fnum); /* Note that fnum's address is passed */ 

printf("Enter your Second Number: "); 
scanf("%d", &snum); /* Same for snum */ 

int answer = fnum + snum; 
printf("%d", answer); 
return 0; 
-2

你錯過了

& Without it the programm wont know where to storage the data

scanf("%d", &fnum); 

我也是不明白爲什麼你把

*

+1

這不是他所錯過的,而'*'是一種尊重。問題是這些指針是無效的,導致未定義的行爲(該操作很幸運得到了一個描述性運行時錯誤'分段錯誤(核心轉儲)')。 – George

+0

這看起來更像是一個問題,而不是一個答案。 「 –

-1

這是一條通用的錯誤消息。您錯誤地將fnum和snum用作指針,並試圖在內存中添加它們的地址。

+0

」試圖在內存中添加他們的地址。「,現在是什麼?使用'fnum'和'snum'完全可以,如果他們有一些指向'* fnum' /'* snum'的分配內存的話。 – George