Язык C: нужно объяснение ошибок при использовании функции - PullRequest
1 голос
/ 29 января 2012

Я абсолютно новичок и в этом сайте, и в программировании, поэтому, пожалуйста, будьте терпеливы со мной.Я решил начать изучать программирование с изучения 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: несоответствие типов при повторном объявлении 'size_controller' Ошибка 01.C 49: неопределенный символ 'width'
Предупреждение 01.C 57: Параметр 'i' никогда не используется
Ошибка 01.C 60: Несоответствие типов при повторном объявлении 'function_X'
Ошибка 01.C 72: Несоответствие типов при повторном объявлении 'function_O'

Пожалуйста, помогите мне!

Ответы [ 4 ]

3 голосов
/ 29 января 2012

Следующая переменная объявляет :

int function_X;                                                         

Возможно, вы хотите объявить прототип для функции :

int function_X(int, int);

В качестве альтернативы, вы можете поместить всю функцию main() в bottom вашего исходного файла, чтобы функции, которые вы вызываете, были объявлены над ней. Затем, когда компилятор доберется до вашей функции main(), он уже увидит объявленные функции и знает, как их вызвать. Это также позволяет избежать повторения аргументов функции дважды: один раз в объявлении прототипа и один раз в определении функции.

3 голосов
/ 29 января 2012

Измените эти (которые выглядят как обычные переменные):

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);

Но единственный действительно разумный совет - это получитьдержите приличную книгу и учитесь, это действительно те проблемы, которых вы могли бы избежать.

0 голосов
/ 29 января 2012

Вы должны изменить две вещи:

1) Как предложено выше, изменить объявление функции, как указано выше

2) Объявить переменную ширины как глобальное значение, объявить ее выше main ().Не в main ().

С этими двумя изменениями это точно сработает ..

0 голосов
/ 29 января 2012

Ваши предварительные декларации неверны.

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);

Как вы их объявили, они являются переменными, и компилятор запутывается, когда вы пытаетесь их вызывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...