C 1个函数中有3个指针-计算器不工作

C 1个函数中有3个指针-计算器不工作,c,pointers,while-loop,switch-statement,function-pointers,C,Pointers,While Loop,Switch Statement,Function Pointers,我的计算器程序中有一个函数有问题。该函数只返回0个值​​. 我希望: Input:3+4 Output:7 我使用了指针来使用引用调用方法。请给我一些提示。 错误在函数readcalc中。如果我在主程序中编写整个语法,它就可以工作了 这是我的密码 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> double readcalc(double*,char*,double*); double additio

我的计算器程序中有一个函数有问题。该函数只返回0个值​​. 我希望:

Input:3+4
Output:7
我使用了指针来使用引用调用方法。请给我一些提示。 错误在函数readcalc中。如果我在主程序中编写整个语法,它就可以工作了

这是我的密码

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
double readcalc(double*,char*,double*);
double addition(double,double);
double subtraction(double,double);
double multiplication(double,double);
double division(double,double);

int main()
{
  double a=0, b=0;
  char op='R', restart = 'Y';
  while (restart != 'N')
  {
    readcalc(&a,&op,&b);
    printf("%lf%lf", a, b);
    printf("\n ---CALCULATOR--- \n\n\n");
    switch (op)
    {

    case '+':printf("%lf + %lf = %lf\n", a, b, addition(a, b)); break;
    case '-':printf("%lf - %lf = %lf\n", a, b, subtraction(a, b)); break;
    case '*':printf("%lf * %lf = %lf\n", a, b, multiplication(a, b)); break;
    case '/':printf("%lf / %lf = %lf\n", a, b, division(a, b)); break;
    default:printf("bad operator!");
    }
    printf("New Calc? (Y,N) \n");
    fflush(stdin);
    scanf("%c", &restart);
    if (restart != 'Y'&&restart != 'N')
    {
        printf("Bad input!");
    }
  } 
  fflush(stdin);
  getchar();
  return 0;
}

double readcalc(double* x,char* opp,double* y)
{

  printf("\n Type your calculation!(z.B.4+7)\n");
  scanf("%lf%c%lf", &x, &opp, &y);
  return 0;

}

double addition(double a,double b)
{
  double c = 0;
  c = a + b;
  return c;
}

double subtraction(double a, double b)
{
  double c = 0;
  c = a - b;
  return c;
}

double multiplication(double a, double b)
{
  double c = 0;
  c = a*b;
  return c;
}

double division(double a, double b)
{
  double c = 0;
  c = a / b;
  return c;
}
我可以更改什么?

readcalc的问题是您将指向指针的指针作为参数传递给scanf。变量已经是指针了,所以不必使用运算符的地址来获取指针,因为这样就可以获得指向指针的指针

还要注意scanf格式,因为%c格式不会跳过前导空格,因此如果输入例如1+2,scanf调用将无法读取运算符或第二个数字。

您的readcalc函数调用

void readcalc(double* x,char* opp,double* y)
{

    printf("\n Type your calculation!(z.B.4+7)\n");
    scanf("%lf%c%lf", x, opp, y); // <== no &'s

}
scanf("%lf%c%lf", &x, &opp, &y);
在指针、int*x等上

当您将其内联放置在main中时,它对变量的地址起作用。 换成

scanf("%lf%c%lf", x, opp, y);
在适当的警告级别,您可能已看到警告


当您在那里时,readcalc返回一个您从未使用过的double。也许它应该是空的?

欢迎这样做。使用一些缩进,程序的可读性会更好。我很高兴告诉我们为什么你认为问题在readcalc中,以帮助我们找到问题。例如,在英语中不是指:你应该使用例如。。