【发布时间】:2014-08-20 08:46:21
【问题描述】:
我首先编写了一个简单的计算器。现在我想将 Functions 中的各个程序组件外包出去。问题是开关部分。程序总是给我默认消息:坏操作员。请看一下,给我一些提示。指针和双指针有问题吗?
这是我的代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
void newcalc(char*,double*,char*,double*);
double switchfunk(double**, char**, double**);
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';
newcalc(&restart,&a,&op,&b);
fflush(stdin);
getchar();
return 0;
}
double switchfunk(double** x, char** opp, double** y)
{
printf("\n ---CALCULATOR--- \n\n\n");
switch (**opp)
{
case '+':printf("%lf + %lf = %lf\n", **x, **y, addition(**x, **y)); break;
case '-':printf("%lf - %lf = %lf\n", **x, **y, subtraction(**x, **y)); break;
case '*':printf("%lf * %lf = %lf\n", **x, **y, multiplication(**x, **y)); break;
case '/':printf("%lf / %lf = %lf\n", **x, **y, division(**x, **y)); break;
default:printf("bad operator!");
}
return 0;
}
void newcalc(char* restart,double* x, char* opp, double* y)
{
while (restart != (char*)'N')
{
readcalc(&x, &opp, &y);
switchfunk(&x, &opp, &y);
printf("New Calc? (Y,N) \n");
fflush(stdin);
scanf("%c", &restart);
if (restart != (char*)'Y'&&restart != (char*)'N')
{
printf("Bad input!");
}
}
}
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;
}
最好的问候!
【问题讨论】:
-
为什么要传递指针和指针以及指针和...这么多指针。只通过
char也足够了。它也会让你感到困惑。 -
技术上在
stdin上调用fflush是未定义的行为。一些平台定义了这种行为,但如果您希望您的代码具有可移植性,请不要这样做。 -
那么为什么要在
main函数中本地声明变量,并将它们作为指针传递给newcalc函数,而不是仅仅在需要它们的地方声明变量(即在本地newcalc函数)? -
使用一些函数指针数组。
-
编译所有警告和调试信息(例如
gcc -Wall -g)。了解如何使用调试器(例如gdb)
标签: c function pointers function-pointers calculator