【问题标题】:3 Pointers in 1 Function - Calculator doesn´t work1 个函数中的 3 个指针 - 计算器不起作用
【发布时间】:2014-08-15 11:00:58
【问题描述】:

我的计算器程序中的一个函数有问题。该函数只返回 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() 以帮助我们找到问题
  • "z.B."在英语中并不意味着“例如”。 :) 你应该使用“例如”。

标签: c pointers while-loop switch-statement function-pointers


【解决方案1】:

readcalc 的问题在于您将指针作为参数传递给 scanf。变量已经是指针,所以你不必使用地址操作符来获取指针,因为你会得到指向指针的指针。

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

【讨论】:

    【解决方案2】:
    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
    
    }
    

    【讨论】:

      【解决方案3】:

      您的readcalc 函数调用

      scanf("%lf%c%lf", &x, &opp, &y);
      

      关于指针,int *x,等等...

      当你将它内联放在 main 中时,它会作用于变量的地址。 改成

      scanf("%lf%c%lf", x, opp, y);
      

      在适当的警告级别,您可能已经看到警告。

      当你在那里时,readcalc 返回一个你从不使用的双精度数。也许它应该是无效的?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2015-06-17
        • 1970-01-01
        相关资源
        最近更新 更多