я пытаюсь передать строку простой функции преобразования, но функция получает только первый символ

#c #string #type-conversion

#c #строка #преобразование типа

Вопрос:

conversion Функция должна получить строку (в данном случае coulour) и сравнить ее с другой строкой (каждого из возможных цветов), а затем вернуть число относительно этого цвета.

Это простой код

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

int conversion(char colour)
{
    printf("n %s n", colour);
    if (!(strcmp(amp;colour, "red")))
        return 0;
    else if (!(strcmp(amp;colour, "orange")))
        return 1;
    else if (!(strcmp(amp;colour, "yellow")))
        return 2;
    else if (!(strcmp(amp;colour, "green")))
        return 3;
    else if (!(strcmp(amp;colour, "blue")))
        return 4;
    else if (!(strcmp(amp;colour, "white")))
        return 5;
    else if (!(strcmp(amp;colour, "black")))
        return 6;
    else return -1;
}

int main(int argc, char *argv[])
{
    char colour = "red";
    int n;

    n = conversion(colour);

    printf("n %d n", n);

    return 0;
}
  

когда я ее компилирую, я получаю эти предупреждения

 prova.c:7:21: warning: format specifies type 'char *' but the argument has type
      'char' [-Wformat]
       ``` printf("n %s n", colour);
                   ~~      ^~~~~~
                   %c```
prova.c:27:7: warning: incompatible pointer to integer conversion initializing
      'char' with an expression of type 'char [4]' [-Wint-conversion]
      ``` char colour = "red";
             ^        ~~~~~ ```

  char colour = "red";
             ^        ~~~~~
  

Мне кажется, что функция получает только первый символ из-за указанных форматов. Как это исправить?

Комментарии:

1. Используйте char * для заголовка вашей функции, как это предлагается.

2. Функция conversion(char colour) не принимает строку, только одну char . Определение char colour = "red"; также неверно, попробуйте char colour[] = "red";

Ответ №1:

char может содержать только один символ. Вы должны использовать массивы char для обработки строк.

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

int conversion(const char* colour)
{
    printf("n %s n", colour);
    if (!(strcmp(colour, "red")))
        return 0;
    else if (!(strcmp(colour, "orange")))
        return 1;
    else if (!(strcmp(colour, "yellow")))
        return 2;
    else if (!(strcmp(colour, "green")))
        return 3;
    else if (!(strcmp(colour, "blue")))
        return 4;
    else if (!(strcmp(colour, "white")))
        return 5;
    else if (!(strcmp(colour, "black")))
        return 6;
    else return -1;
}

int main(int argc, char *argv[])
{
    char colour[] = "red";
    int n;

    n = conversion(colour);

    printf("n %d n", n);

    return 0;
}