计算器使用C中的开关和功能

时间:2013-08-23 02:05:15

标签: c function switch-statement calculator

这是我们今天的练习,也是我们第一次在课堂上编写呼叫功能。这些是给我们的指示:

  1. 我必须选择一个C程序计算器:0 - 退出,1 - 加,2 - 减,3 - 乘和4 - 除。
  2. 一旦用户输入他们的选择,我会向他们索要两个号码。
  3. 我需要为每个算术运算使用函数。
  4. 当我完成计算时,它应该返回菜单。
  5. 程序仅在用户选择0时结束。
  6. 我的程序已经编辑了很多。

    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    
    int add(int, int);
    int sub(int, int);
    int mul(int, int);
    int div(int, int);
    
    int main(){
    int num1, num2, choice;
    
    printf("[0] Exit\v[1] Add\v[2] Subtract\v[3] Multiply\v[4] Divide");
    scanf("%d", &choice);
    
    switch(choice){
        case 0:
            return 0;
            break;
        case 1:
            printf("Enter 1st number:\n");
            scanf("%d", &num1);
            printf("Enter 2nd number:\n");
            scanf("%d", &num2);
            printf("%d", add(num1,num2));
            break;
        case 2:
            printf("Enter 1st number:\n");
            scanf("%d", &num1);
            printf("Enter 2nd number:\n");
            scanf("%d", &num2);
            printf("%d ", sub(num1,num2));
            break;
        case 3:
            printf("Enter 1st number:\n");
            scanf("%d", &num1);
            printf("Enter 2nd number:\n");
            scanf("%d", &num2);
            printf("%d", mul(num1,num2));
            break;
        case 4:
            printf("Enter 1st number:\n");
            scanf("%d", &num1);
            printf("Enter 2nd number:\n");
            scanf("%d", &num2);
            printf("%d", div(num1,num2));
            break;
        default:
            printf("That is not a valid choice.");
            break;
    }
        //Addition
    int add(int x,int y){
        int z = x + y;
        return z;
    }   
    //Subtraction
    int sub(int a,int b){
        int c = a - b;
        return  c;
    }   
    //Multiplication
    int mul(int d,int e){
        int f = d * e;
        return f;
        }
    //Division
    int div(int g,int h){
        int i = g / h;
        return i;
    }
    }
    

    目前,只有两个错误: [错误]'div'的冲突类型 和 之前'div'的声明就在这里

6 个答案:

答案 0 :(得分:1)

“我已经编辑了它,但我总是收到此错误:[错误]'div'的类型冲突”

=&GT;因为函数名称div()已在stdlib.h中定义。

您应该使用其他名称重命名。

例如:Divide(int,int);

答案 1 :(得分:1)

编程的一个基本原则是D.R.Y. =不要重复自己。如果您在多个点中看到相同的代码以相同的方式重复,则表示您可以将其分组为一个很好的函数。您可以通过不在每个数学函数中分配变量来节省一些空间,只需返回数学公式。

另外,如果这是一个连续循环,你应该使用一个循环

while(true) {
...
}

并在用户键入0

时退出

答案 2 :(得分:0)

您通过编码得到了巨大的问题:

int sum = add; // etc

这没有任何意义 - 您将一个函数指针(add)分配给intsum

您只想(稍后在代码中):

printf("%d\n", add(num1, num2);

你使代码过于复杂 - 简单就是!。

答案 3 :(得分:0)

是的,你有语法错误。您的函数main()如下所示:

int main(void) {
   ...whatever...
   switch (choice) {
     ...whatever...
   }

int add() {
         ...
}

...whatever...

} /* wrong place for closing '}' (this closes the "main() {" block */

您的代码的结果是函数add(),sub()等在main()的主体内定义,这是错误的。

答案 4 :(得分:0)

你的函数声明应该在main函数之外。所以关闭main函数,比定义add,sub,mul,div。它将解决错误。 使用循环来反复执行某些过程。 为避免代码冗余,您可以创建一个获取输入值并将其存储在内存地址中的函数。在任何地方调用此函数而不是重复代码。

您可以在下面找到一个函数名称 getData ,它从用户获取两个值并将其存储在传递给该函数的内存地址中。调用程序将传递存储器地址,其中必须存储这些值。

编写代码时的一些准则:

1.) Write DRY(Dont Repeat Yourself) type code.
2.) Use only required header files. stdio.h is enough to do basic programming in your case.

简单工作代码:

#include<stdio.h>

// Function Prototype
int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);
void getData(int *, int *);

// Main Function
int main()
{
    int num1, num2, choice;
    while(1)
    {
      printf("\n[0] Exit\n[1] Add\n[2] Subtract\n[3] Multiply\n[4] Divide\nEnter Your Choice:");
      scanf("%d", &choice);
      switch(choice)
      {
         case 0:
           return 0;
         case 1:
           getData(&num1, &num2); // get Input Values
           printf("%d", add(num1,num2));
           break;
         case 2:
           getData(&num1, &num2); // get Input Values       
           printf("%d ", sub(num1,num2));
           break;
         case 3:
           getData(&num1, &num2); // get Input Values       
           printf("%d", mul(num1,num2));
           break;
         case 4:
           getData(&num1, &num2); // get Input Values
           printf("%d", div(num1,num2));
           break;
         default:
           printf("That is not a valid choice.");
           break;
      }
    }
}

// Get Memory Address of num1, num2 and store input values in those locations.
void getData(int *num1_ptr, int *num2_ptr)
{
printf("Enter 1st number:\n");
    scanf("%d", num1_ptr);
printf("Enter 2nd number:\n");
    scanf("%d", num2_ptr);
}

//Addition
int add(int x,int y)
{   return x+y;   }   

//Subtraction
int sub(int x,int y)
{   return  x-y;  }   

//Multiplication
int mul(int x,int y)
{   return x*y;   }

//Division
int div(int x,int y)
{   return x/y;   }

答案 5 :(得分:0)

#include<stdio.h>
#include<math.h>
int add(int, int);
int sub(int, int);
int mul(int, int);
float dib(float, float);

int main(){
int num1, num2, choice;

printf("1:addiction\n2:substraction\n3:multiplication\n4:division\n0:exit\nplease enter your choice:");
scanf("%d", &choice);

switch(choice){
    case 0:
        return 0;
        break;
    case 1:
        printf("Enter 1st number:\n");
        scanf("%d", &num1);
        printf("Enter 2nd number:\n");
        scanf("%d", &num2);
        printf("%d", add(num1,num2));
        break;
    case 2:
        printf("Enter 1st number:\n");
        scanf("%d", &num1);
        printf("Enter 2nd number:\n");
        scanf("%d", &num2);
        printf("%d ", sub(num1,num2));
        break;
    case 3:
        printf("Enter 1st number:\n");
        scanf("%d", &num1);
        printf("Enter 2nd number:\n");
        scanf("%d", &num2);
        printf("%d", mul(num1,num2));
        break;
    case 4:
        printf("Enter 1st number:\n");
        scanf("%d", &num1);
        printf("Enter 2nd number:\n");
        scanf("%d", &num2);
        printf("%f", dib(num1,num2));
        break;
    default:
        printf("That is not a valid choice.");
        break;
}
        }

    //Addition
int add(int x,int y){
    int z = x + y;
    return z;
}
//Subtraction
int sub(int a,int b){
    int c = a - b;
    return  c;
}
//Multiplication
int mul(int d,int e){
    int f = d * e;
    return f;
    }
//Division
float dib(float g,float h){
    float i = g / h;
    return i;
}