我正在尝试用C编译程序,但是我一直收到以下错误:
Segmentation fault
以下是代码:
#include <stdio.h>
#define calculation1 main
void calculation1(int *num1, int *num2) {
int total;
printf("Program One: \n");
printf("=========== \n");
printf("Number One: ");
scanf("%d", &num1);
printf("Number Two: ");
scanf("%d", &num2);
total = *num1 + *num2;
printf("%d + %d = %d \n",&num1,&num2,total );
}
我在这里做错了什么?我该如何解决这个错误?
答案 0 :(得分:3)
<label class="radio-inline">
<input type="radio" name="scoring" id="standard" value="standard" checked> Standard
</label>
<label class="radio-inline">
<input type="radio" name="scoring" id="decimal" value="decimal"> Decimal
</label>
<label class="radio-inline">
<input type="radio" name="scoring" id="standard_ppr" value="standard_ppr"> Standard PPR
</label>
<label class="radio-inline">
<input type="radio" name="scoring" id="decimal_ppr" value="decimal_ppr"> Decimal PPR
</label>
scanf需要一个地址,num1和num2已经包含了你在函数中作为指针传递它们的地址。
要改变的另一件事是:
scanf("%d", num1);
scanf("%d", num2);
printf("%d + %d = %d \n",*num1,*num2,total );
取消引用提供值的指针
答案 1 :(得分:3)
我在这里做错了什么?我该如何解决这个错误?
问题1
使用
#define calculation1 main
void calculation1(int *num1, int *num2) {
你实际上是在使用:
void main(int *num1, int *num2) {
这是错误的。 main
需要:
int main(void) {
或
int main(int argc, char** argv) {
您的程序受到未定义的行为。
问题1
您正在使用
scanf("%d", &num1);
scanf("%d", &num2);
当num1
和num2
属于int*
时。你需要:
scanf("%d", num1);
scanf("%d", num2);
问题3
您正在使用
printf("%d + %d = %d \n",&num1,&num2,total );
鉴于num1
和num2
的类型,需要:
printf("%d + %d = %d \n", *num1, *num2, total );
<强>修正强>
您的计划需要进行一些改革。尝试:
#include <stdio.h>
#define calculation1 main
int calculation1() {
int num1; // Not int*. If you use int*, you'll need to allocate memory
int num2;
int total;
printf("Program One: \n");
printf("=========== \n");
printf("Number One: ");
scanf("%d", &num1); // You need to use &num1 since num1 is of type int.
printf("Number Two: ");
scanf("%d", &num2);
total = num1 + num2;
printf("%d + %d = %d \n", num1, num2, total);
}
答案 2 :(得分:1)
尽管@jayant指出了错误 -
#define calculation1 main
void calculation1(int *num1, int *num2) {
因此,calculation1
将替换为main
,因此简而言之,这就是您的main
功能。
这不是有效的,应该避免任何情况。我很困惑你如何打电话或采取命令行参数?但这绝对是错误的。
简单地说,这样做 -
int main(void)
或int main(int argc,char *argv[])
并将num1
和num2
声明为int
变量,然后在其中输入并执行所需的操作。