Как мне вернуть строку в C? - PullRequest
0 голосов
/ 30 апреля 2020

Итак, я пытался выполнить задачу, заданную на курсе Harvard CS50. Я смог создать программу, но хотел сделать ее чище с точки зрения дизайна. Я решил использовать функцию.

Цель состояла в том, чтобы создать программу, которая принимает значение высоты от 1 до 8. Если высота была 1, то результат будет # #. Если высота увеличивается, то на выходе будет еще 2 игрока с 1 дополнительным # слева и справа.

Когда я попытался вернуть значение и создать функцию с типом возврата string Я продолжал получать ошибки.

Код:

#include <stdio.h>
#include <cs50.h>

char *mario();

int main(void){

    printf("%c", mario());

}


char *mario(){

    int stop = 0;

    while(stop == 0){

        unsigned int height = get_int("Height: ");
        char *result = " ";

        if(height == 1){

            printf("\n# #\n");
            stop = 1;

        }else if(height == 2){

            result = "\n # #\n## ##\n";
            stop = 1;

        }else if(height == 3){

            result = "\n  # #\n ## ##\n### ###\n";
            stop = 1;

        }else if(height == 4){

            result = "\n   # #\n  ## ##\n ### ###\n#### ####\n";
            stop = 1;

        }else if(height == 5){

            result = "\n    # #\n   ## ##\n  ### ###\n #### ####\n##### #####\n";
            stop = 1;

        }else if(height == 6){

            result = "\n     # #\n    ## ##\n   ### ###\n  #### ####\n ##### #####\n###### ######\n";
            stop = 1;

        }else if(height == 7){

            result = "\n      # #\n     ## ##\n    ### ###\n   #### ####\n  ##### #####\n ###### ######\n####### #######\n";
            stop = 1;

        }else if(height == 8){

            result = "\n       # #\n      ## ##\n     ### ###\n    #### ####\n   ##### #####\n  ###### ######\n ####### #######\n######## ########\n";
            stop = 1;
        }

    }

    return result;
}

Ошибка:

mario.c:33:7: error: conflicting types for 'mario'
char *mario(){
      ^
mario.c:5:5: note: previous declaration is here
int mario(void);
    ^
mario.c:88:12: error: use of undeclared identifier 'result'
    return result;
           ^
2 errors generated.
<builtin>: recipe for target 'mario' failed
make: *** [mario] Error 1

Как я могу это исправить?

Я использую CS50 библиотека как видно и в IDE.

1 Ответ

1 голос
/ 30 апреля 2020
  1. Изменить int mario(void); на char *mario(void);

  2. Изменить printf("%c", mario()); на printf("%s", mario());

  3. Переместить char *result = " "; до начала функции mario(), поэтому она находится в области действия return.

...