#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;
}