C语言:需要解释使用函数时的错误

时间:2012-01-29 07:52:13

标签: c function

我对本网站和编程都是一个绝对的新手,所以请耐心等待我。我决定通过学习C开始学习编程。现在,除了stdio.h之外,我还是什么都不知道。无论如何,我现在遇到了一个新主题,这是功能,我想尝试用它来做某事。

但是,我从来没有机会知道我的算法是否正确 由于编译时的错误,我真的不明白什么 编译器的错误消息试图告诉我。我不知道导致错误的原因。 因此,我需要有人看看我的代码并指导/解释/教我, 任何东西。

我试图通过使用函数以棋盘方式打印X和O,这里是 我的代码。


int function_X;                                                         
int function_O;                                                               
int size_controller;                                                          

main()                                                            
{                                                                             
    int i;                                                                     
    int j;                                                                     
    int width;                                                                
    int height;

    clrscr();                                                                  

    printf("Width: \n");                                                       
    scanf("%d", &width);

    printf("Height: \n");                                                      
    scanf("%d", &height);

    for(j=0; j<height; j++)                                                   
    {                                                                          
        for(i=0; i<width; i++)                                                  
        {                                                                      
            if(size_controller(i) )                                              
            {                                                                 
                printf("\n");                                                     
            }                                  

            if(function_X(i, j) )                                              
            {           
                printf("X");                                                    
            } 

            if(function_O(i, j) )                                                      
            {                                                                
                printf("O");                                     
            }                                                                
        }                                                                  
    } 

    return 0;
}


int size_controller(int i)                                                    
{                                                                           
    if(i%width == 0)                                                           
    {                                                                          
        return 1;                                                               
    }                                                                          
    else                                                                       
    {                                                                          
        return 0;                                                              
    }                                                                         
}                                                                             


int function_X(int i, int j)                                                 
{                                                                             
    if((j%2 != 0) && (i%2 != 0) || (j%2 == 0) && (i%2 == 0))                   
    {                                                                          
        return 1;                                                               
    }                                                                          
    else                                                                      
    {                                                                          
        return 0;
    }   
}

int function_O(int i, int j)                                                  
{                                                                             
    if((j%2 != 0) && (i%2 == 0) || (j%2 == 0) && (i%2 != 0))                  
    {                                                                          
        return 1;                                                               
    }                                                                        
    else                                                                     
    {                                                                          
        return 0;                                                             
    }                                                                      
}                                                                          

当我尝试运行程序时,编译器声明了7个错误和1个警告:

错误01.C 27:呼叫无功能
错误01.C 32:呼叫无功能
错误01.C 37:呼叫无功能
错误01.C 48:重新声明&#39; size_controller&#39;重新声明时类型不匹配 错误01.C 49:未定义的符号&#39;宽度&#39;
警告01.C 57:参数&#39; i&#39;从未使用过 错误01.C 60:重新声明&#39; function_X&#39;中的类型不匹配 错误01.C 72:重新声明&#39; function_O&#39;中的类型不匹配

请帮助我!

4 个答案:

答案 0 :(得分:3)

更改这些(看起来像普通变量):

int function_X;                                                         
int function_O;                                                               
int size_controller;

对于这些(看起来像函数声明):

int size_controller(int i, int width); /* Needs width parameter. */
int function_X(int i, int j);
int function_O(int i, int j);

但唯一真正明智的建议是掌握一本体面的书和学习,这些都是你本可以避免的问题。

答案 1 :(得分:3)

以下是声明变量

int function_X;                                                         

您可能想要声明函数的原型

int function_X(int, int);

或者,您可以将整个main()函数放在源文件的 bottom 中,以便您调用的函数在其上方声明。然后当编译器到达你的main()函数时,它已经看到声明的函数并知道如何调用它们。这样做也避免了必须重复两次函数参数,一次在原型声明中,一次在函数定义中。

答案 2 :(得分:0)

您的前瞻性声明错误。

int function_X;                                                         
int function_O;                                                               
int size_controller;

实际上是函数的声明(带参数),所以它们应该是

int size_controller(int i);     
int function_X(int i, int j);  
int function_O(int i, int j);

当你声明它们时,它们是变量,当你试图调用它们时编译器会感到困惑。

答案 3 :(得分:0)

你必须改变两件事:

1)如上所述,改变功能声明如上

2)声明宽度变量为全局意味着将其声明为main()。不在main()中。

通过做这两个改变肯定会有效..