0

昨日は同じ問題のプログラム(ASCIIコンバーターなど)を作ることができました[プログラムを作成するときにすべての関数にプロトタイプエラーがありませんでした]ランダムな試行錯誤で修正できました。それ。これが私の算数クイズの練習プログラムです。また、int initialize()、clear()、exit()、additionquiz()、subtractionquiz()、divisionquiz()、multiplicationquiz();を入れてみました。そしてそれはまだ私に行方不明のプロトタイプを与えました。

 #include <stdio.h>
    /* Main Menu */
    int numbers[10];
    int main()
    {
        while(1==1)
        {
            int choice;
            initialize();
            printf("Arithmetic Quiz Program\n");
            printf("1 - Addition\n2 - Subtraction\n3 - Multiplication\n4 - Division\n5 - Exit\n");
            scanf("%d",&choice);
            if(choice==1)
            {
                clear();
                additionquiz();
            }
            else if(choice==2)
            {
                clear();
                subtractionquiz();
            }
            else if(choice==3)
            {
                clear();
                multiplicationquiz();
            }
            else if(choice==4)
            {
                clear();
                divisionquiz();
            }
            else if(choice==5)
            {
                exit();
            }
            else
            {
                printf("%cPlease choose a number from 1 - 5",7);
                clear();
                continue;
            }
        }
        return 0;
    }
    /* For clearing the page */
    int clear()
    {
        int i;
        for(i=0;i<25;i++)
        {
            printf("\n");
        }
    }
    /* Assigns the array */
    int initialize()
    {
        numbers[0]=6;
        numbers[1]=0;
        numbers[2]=2;
        numbers[3]=5;
        numbers[4]=3;
        numbers[5]=1;
        numbers[6]=9;
        numbers[7]=4;
        numbers[8]=7;
        numbers[9]=8;
        return 0;
    }
    /* addition quiz */
    int addition()
    {
        int a,diff,b,answer,choice;
        a=0;
        diff=1;
        b=a+diff;
        while(1==1)
        {
            if(a>9)
            {
                a=0;
                diff++;
            }
            if(b>9)
            {
                b=0;
            }
            if(diff>9)
            {
                diff=0;
            }
            printf("%d + %d = ",number[a],number[b]);
            scanf("%d",&answer);
            if(answer==number[a]+number[b])
            {
                printf("\nCORRECT!!!\n");
                a++;
            }
            else
            {
                printf("\nWRONG!!!\n");
                clear();
                additionquiz();
            }
            printf("\nWhat do you want to do next?\n1 - Answer another addition Question\n2 - Go back to main menu\n3 - Exit program\n");
            scanf("%d",&choice);
            if(choice==1)
            {
                clear();
                additionquiz();
            }
            else if(choice==2)
            {
                clear();
                main();
            }
            else if(choice==3)
            {
                exit();
            }
            else
            {
                printf("%cPlease choose a number from 1 to 3",7);
            }
        }
        return 0;
    }
    /* The subtraction quiz */
    int subtraction()
    {
    int a,diff,b,answer,choice;
        a=0;
        diff=1;
        b=a+diff;
        while(1==1)
        {
            if(a>9)
            {
                a=0;
                diff++;
            }
            if(b>9)
            {
                b=0;
            }
            if(diff>9)
            {
                diff=0;
            }
            if(numbers[a]-numbers[b]<0)
            {
                a++;
                subtraction();
            }
            printf("%d - %d = ",numbers[a],numbers[b]);
            scanf("%d",&answer);
            if(answer==numbers[a]-numbers[b])
            {
                printf("CORRECT!!!\n\n");
            }
            else
            {
                printf("WRONG!!!\n\n");
                clear();
                subtractionquiz();
            }
            printf("\nWhat do you want to do next?\n1 - Answer another subtraction Question\n2 - Go back to main menu\n3 - Exit program\n");
            scanf("%d",&choice);
            if(choice==1)
            {
                clear();
                subtractionquiz();
            }
            else if(choice==2)
            {
                clear();
                main();
            }
            else if(choice==3)
            {
                exit();
            }
            else
            {
                printf("%cPlease choose a number from 1 to 3",7);
            }
        }
        return 0;
    }
    /* multiplication quiz */
    int multiplicationquiz()
    {
    int a,diff,b,answer,choice;
        a=0;
        diff=1;
        b=a+diff;
        while(1==1)
        {
            if(a>9)
            {
                a=0;
                diff++;
            }
            if(b>9)
            {
                b=0;
            }
            if(diff>9)
            {
                diff=0;
            }
            printf("%d * %d = ",number[a],number[b]);
            scanf("%d",&answer);
            if(answer==number[a]*number[b])
            {
                printf("\nCORRECT!!!\n");
                a++;
            }
            else
            {
                printf("\nWRONG!!!\n");
                clear();
                multiplicationquiz();
            }
            printf("\nWhat do you want to do next?\n1 - Answer another multiplication Question\n2 - Go back to main menu\n3 - Exit program\n");
            scanf("%d",&choice);
            if(choice==1)
            {
                clear();
                multiplicationquiz();
            }
            else if(choice==2)
            {
                clear();
                main();
            }
            else if(choice==3)
            {
                exit();
            }
            else
            {
                printf("%cPlease choose a number from 1 to 3",7);
            }
        }
        return 0;
    }
    /* Division quiz */
    int divisionquiz()
    {
        int a,diff,b,answer,choice,remain;
        a=0;
        diff=1;
        b=a+diff;
        while(1==1)
        {
            if((numbers[a]<numbers[b])||numbers[b]==0)
            {
                a++;
                clear();
                divisionquiz();
            }
            if(a>9)
            {
                a=0;
                diff++;
            }
            if(b>9)
            {
                b=0;
            }
            if(diff>9)
            {
                diff=0;
            }
            printf("%d % %d = \n",numbers[a],numbers[b]);
            printf("What is the whole number?\n");
            scanf("%d",&answer);
            printf("What is the remainder? (0 if none\n)");
            scanf("%d",&remain);
            if(answer==numbers[a]/numbers[b] && remain==numbers[a]%numbers[b])
            {
                printf("\nCORRECT!!!");
                a++;
            }
            else
            {
                printf("\nWRONG!!!");
                clear();
                divisionquiz();
            }
            printf("\nWhat do you want to do next?\n1 - Answer another division Question\n2 - Go back to main menu\n3 - Exit program\n");
            scanf("%d",&choice);
            if(choice==1)
            {
                clear();
                divisionquiz();
            }
            else if(choice==2)
            {
                clear();
                main();
            }
            else if(choice==3)
            {
                exit();
            }
            else
            {
                printf("%cPlease choose a number from 1 to 3",7);
            }
        }
        return 0;
    }
4

4 に答える 4

1

私の上の男が今言ったことの詳細については、ここで見つけることができます。このページでは、コードでさまざまな種類の警告を抑制または有効にする方法の概要を説明します。

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

また、別のヒント。次の構文を使用して、コードにいくつかのwhileループを記述しました。

while (1==1)
{
    ...
}

これは同じことをします

while(1) 
{

}

その理由は次のとおりです。括弧内のコードがtrueの場合、whileループ、ifステートメント、elseステートメント、およびelseifステートメントはすべてそれらの下のコードを実行します。Cの1は真で、0は偽なので、上記のwhileループはあなたと同じように機能します。

于 2012-07-18T16:37:19.747 に答える
1

Cコンパイラは上から下に動作します。関数を呼び出そうとする前に、関数が存在することを知っている必要があります。したがって、2つの選択肢があります。

  1. 上記 で関数を定義mainします(つまり、関数本体全体を移動します)。
  2. 上記 の関数を宣言mainします。つまりint initialize();、上記などを置きmainます。

int initialize()Cでは、がとは異なることにも注意してくださいint initialize(void)。2番目のバージョンを使用する必要があります。

于 2012-04-09T13:19:25.520 に答える
1

exitは外部関数であり、ソースコードの先頭にそのヘッダーを含める必要があります。

#include <stdlib.h>   // exit

関数呼び出しでは、加算関数が呼び出さadditionれ、関数定義で呼び出されることに注意してくださいadditionquiz。減算についても同じです。

他の関数については、呼び出す前に宣言する必要があります。つまり、main関数定義の前です。

int initialize(void);
int clear(void);
int additionquiz(void);
int subtractionquiz(void);
int divisionquiz(void);
int multiplicationquiz(void);

int main(void)
{
    /* ... */

すべての関数を1つに宣言すると、次のようになることに注意してください。

int initialize(void), clear(void), additionquiz(void),
    subtractionquiz(void), divisionquiz(void), multiplicationquiz(void);

許可されていますが、あまり読みにくく、読者を驚かせる可能性があります。

最後に、これらの関数が別のソースコードから呼び出されていない場合は、次のstaticように宣言の先頭に指定子を追加して、リーダー(およびコンパイラー)に通知する必要があります。

static int clear(void);  // the function is only called in this source code
于 2012-04-09T13:26:20.277 に答える
0

まず、すべての警告を有効にして、デバッグ情報を使用してコンパイルする方法を学びます(gcc -Wall -gLinuxなど)。次に、コンパイラから警告が出なくなるまでプログラムを改善します(コンパイラを信頼します)。

次に、関数ごとに宣言を作成する方法を学びます。それらを使用して唯一のソースファイルを開始するか、複数のソースファイルがある場合は、それらを使用してヘッダーファイルを作成します。

#includeしたがって、行の直後に追加できます。

// clear the screen
void clear(void);

// initialize the numbers
int initilize(void);

// addition quiz
int addition(void);

// subtraction quiz
int subtraction(void);

// multiplication quiz
int multiplicationquiz(void);

// division quiz
int divisionquiz(void);

ちなみに、関数にはもっと名前を付けることができ、正式な引数を含めることができます(それ以外の場合voidは引数リストとして使用します)。そして、なぜそれらがすべてあなたが使用しないものを返すのか理解intできません。

于 2012-04-09T13:25:37.513 に答える