-2

这是我们今天的练习,也是我们第一次在课堂上编写调用函数。这些是给我们的指示:

  1. 我必须制作一个带有选择的 C 程序计算器:0 - 退出,1 - 加,2 - 减,3 - 乘和 4 - 除。
  2. 一旦用户输入他们的选择,我会要求他们提供两个数字。
  3. 我需要为每个算术运算使用函数。
  4. 当我完成计算后,它应该返回菜单。
  5. 程序仅在用户选择 0 时结束。

这是我已经编辑了很多的程序。

#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' 声明在这里

4

6 回答 6

1

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

=> 因为函数名 div() 已经在 stdlib.h 中定义了。

你应该用另一个名字重命名它。

例如:除法(int,int);

于 2013-08-23T02:49:12.247 回答
1

编程的一个基本原则是 DRY = Don't Repeat Yourself。如果您在多个位置看到相同的代码以相同的方式重复,那么这意味着您可以将它分组到一个不错的函数中。您可以通过不在每个数学函数中分配变量来节省一些空间,只需返回数学公式即可。

此外,如果这是一个连续循环,您可能应该使用这样的循环

while(true) {
...
}

如果用户输入 0 则退出

于 2013-08-23T03:09:44.323 回答
0

通过编码,您遇到了一个巨大的问题:

整数总和=加;//等等

这没有任何意义——您将函数指针 ( add)分配给int( sum)

您只需要(稍后在代码中):

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

您使代码过于复杂-简单是好的

于 2013-08-23T02:14:32.503 回答
0

顺便说一句,您有语法错误。您的功能main()如下所示:

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

int add() {
         ...
}

...whatever...

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

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

于 2013-08-23T03:01:51.400 回答
0

您的函数声明应该在主函数之外。所以关闭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;   }
于 2013-08-23T04:21:41.113 回答
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;
}
于 2015-08-01T21:23:36.170 回答