Как сканировать номера в строках, разделенные запятыми в c

PWenzel99 спросил: 28 марта 2018 в 03:17 в: c

Я пытаюсь сканировать значения RGB в строке, разделенной запятыми

char colors[11]= "255,80,120";
int r,g,b;
sscanf("%3[^,]%d", colors, &r, &g, &b);

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

1 ответ

medalib ответил: 28 марта 2018 в 03:38

Ваш звонок int sscanf(const char *str, const char *format, ...) неверен. Первым параметром должна быть строка, из которой вы собираетесь анализировать данные, а не формат. Кроме того, вы должны изменить формат с "%3[^,]%d" на "%d,%d,%d". Поэтому ваш код должен быть:

sscanf(colors, "%d,%d,%d", &r, &g, &b);

вместо:

sscanf("%3[^,]%d", colors, &r, &g, &b);

Также рассмотрите возможность увеличения размера colors так что он может содержать все символы строки, а также нулевой символ \0.

Edit: как упомянуто @chux в комментариях возвращаемое значение sscanf должно быть проверено для обработки ошибок:

if (sscanf(colors, "%d,%d,%d", &r, &g, &b) != 3) {
    /* Handle errors. */
}
chux ответил: 28 марта 2018 в 02:09
Надежный код проверяет возвращаемое значение sscanf() для обеспечения успешного сканирования. Предложить if (sscanf(colors, "%d,%d,%d", &r, &g, &b) != 3) do_some_error_handling();
medalib ответил: 28 марта 2018 в 03:34
@ Чукс, я полностью согласен.