gpt4 book ai didi

调用 scanf 后代码崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:19 27 4
gpt4 key购买 nike

我是一名编程初学者,我的代码需要帮助。它应该是一个具有 6 个功能的计算器,包括 main。四个用于操作,一个用于输入两个数字。一旦我输入第二个数字输入,它就会崩溃。此外,我在将函数 input() 的值返回到主函数以执行操作时遇到了问题。可能和scanning for opt有关?

#include <stdio.h>

int add(int n1, int n2);
int subtract(int n1, int n2);
int multiply(int n1, int n2);
int divide(int n1, int n2);
void input(int *n1, int *n2);


int main(void)
{
int n1, n2, ret;
char opt;


input(&n1, &n2);

printf("Addition -> 1\nSubtraction -> 2\nMultiplication -> 3\nDivision -> 4\nReset -> R\nExit -> E\n");

scanf("%c", &opt);



switch(opt){
case '1':
ret = add(n1, n2);
printf("The sum is %d\n", ret);
break;
case '2':
ret = subtract(n1, n2);
printf("The difference is %d\n", ret);
break;
case '3':
ret = multiply(n1, n2);
printf("The sum is %d\n", ret);
break;
case '4':
ret = divide(n1, n2);
printf("The sum is %d\n", ret);
break;
}

return 0;

}


void input(int *n1, int *n2)
{
int a, b;

printf("Enter first number: \n");
scanf("%d", &n1);

printf("Enter second number: \n");
scanf("%d", &n2);

*n1 = a;
*n2 = b;
}

add(n1, n2)
{
int result;
result = (n1+n2);
return result;
}

subtract(n1, n2)
{
int result;
result = (n1-n2);
return result;
}

divide(n1, n2)
{
int result;
result = (n1/n2);
return result;
}

multiply(n1, n2)
{
int result;
result = (n1*n2);
return result;
}

我这样做对吗?

最佳答案

问题出在输入:

printf("Enter first number: \n");
scanf("%d", &n1);

printf("Enter second number: \n");
scanf("%d", &n2);

%d 格式说明符需要一个 int * 参数。由于 n1n2 已经是 int *,这意味着 &n1&n2 是类型 int **。这会导致段错误。

要解决这个问题,只需传入 n1n2:

void input(int *n1, int *n2)
{
printf("Enter first number: \n");
scanf("%d", n1);

printf("Enter second number: \n");
scanf("%d", n2);

getchar();
}

您会注意到,如果执行此操作,则不需要 ab。另请注意调用 getchar() 以使用输入缓冲区中的换行符。如果您不这样做,换行符将被 main 中的 scanf 获取,并且不会输入 switch 语句。

此外,您的四个数学函数没有指定返回类型。由于这些函数的原型(prototype)将它们声明为返回 int,并且因为 int 是函数的默认返回类型,所以它可以正常工作。但是,您应该始终指定返回类型。

关于调用 scanf 后代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com