-2

これは今日の演習であり、呼び出し関数をクラスでコーディングするのは初めてです。これらは私たちに与えられた指示です:

  1. 0 - 終了、1 - 加算、2 - 減算、3 - 乗算、4 - 除算の選択肢を持つ C プログラム計算機を作成する必要があります。
  2. ユーザーが選択肢を入力したら、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;
}
}

今のところ、エラーは 2 つだけです: [Error] conflicting types for 'div' and 以前の宣言の 'div' was here

4

6 に答える 6

1

プログラミングの基本原則の 1 つは、DRY = Don't Repeat Yourself です。同じコードが複数の場所で同じように繰り返されている場合は、それを素敵な関数にグループ化できることを意味します。各数学関数に変数を割り当てず、単に数式を返すことで、スペースを節約できます。

また、これが継続的なサイクルであることが意図されている場合は、おそらく次のようなループを使用する必要があります

while(true) {
...
}

ユーザーが 0 を入力すると終了します

于 2013-08-23T03:09:44.323 に答える
0

コーディングによって大きな問題が発生しました。

int 合計 = 追加; //など

これは意味がありません -- 関数ポインタ ( add) をint( sum)に代入しています。

あなたは単に(コードの後半で)欲しい:

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

あなたはコードを複雑にしすぎています-- シンプルさが良いです!.

于 2013-08-23T02:14:32.503 に答える
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 に答える
0

関数宣言はメイン関数の外にある必要があります。add、sub、mul、divを定義するよりも、メイン関数を閉じます。エラーを解決します。ループを使用して、いくつかのプロセスを何度も実行します。コードの冗長性を避けるために、入力値を取得してメモリ アドレスに格納する関数を作成できます。コードを繰り返す代わりに、好きな場所でこの関数を呼び出します。

以下に、ユーザーから 2 つの値を取得し、その関数に渡されたメモリ アドレスに格納する関数名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

ところで、構文エラーがあります。関数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 に答える