2016-12-16 91 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