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

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)
{
    /* ... */

请注意,一次性声明所有函数,如下所示:

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 回答
1

C 编译器从上到下工作。在您尝试调用它们之前,它必须知道您的函数存在。所以你有两个选择:

  1. 在上面 定义你的函数main(即移动整个函数体)。
  2. 在上面 声明你的函数main。即把int initialize();等放在上面main

另请注意,在 C 中,int initialize()int initialize(void). 您应该使用第二个版本。

于 2012-04-09T13:19:25.520 回答
1

更多关于我上面那个人所说的信息可以在这里找到。本页概述了如何在代码中禁止或启用不同类型的警告:

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

还有另一个提示。您使用以下语法在代码中编写了几个 while 循环:

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

这会做同样的事情

while(1) 
{

}

原因如下:如果括号内的代码为真,while 循环、if 语句、else 语句和 else if 语句都将执行它们下面的代码。由于 C 中的 1 为真而 0 为假,因此我上面的 while 循环与您的循环相同。

于 2012-07-18T16:37:19.747 回答
0

首先,学习在启用所有警告和调试信息的情况下进行编译(例如,gcc -Wall -g在 Linux 上使用)。然后改进你的程序,直到编译器没有给出警告(相信编译器)。

然后,学习为每个函数声明。用它们开始你的唯一源文件,或者,如果你有多个源文件,用它们制作一个头文件。

所以你可以在你的#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 回答