try
if (sscanf(buf, "%*[^C]COLOR=\"%d", &colorNUM) == 1)
Причина, по которой ваш попытанный формат "%*[^\"]COLOR"
... не сработал, состоит в том, что %*[\"]
соответствует всему, вплоть до "
, пропуская ЦВЕТ, поэтомутогда не в состоянии соответствовать ЦВЕТУ. Однако вышеприведенное не будет выполнено, если в строке есть еще C
в каком-то другом месте до COLOR
. Чтобы избежать этого, вам, вероятно, лучше использовать strstr
, возможно, в цикле, если COLOR
может появиться в нескольких местах.
for (const char *p = buf; p = strstr(p, "COLOR"); ++p) {
if (sscanf(p, "COLOR=\"%d", &colorNum) == 1) {
// found a color number
Обратите внимание, что попытки сопоставлять символы после %d
бессмысленныв зависимости от того, совпадают они или нет, возвращаемые значения будут одинаковыми, поэтому невозможно определить. Если вы хотите убедиться, что после числа стоит "
, вам нужно что-то вроде
int end = 0;
if (sscanf(p, "COLOR=\"%d\"%n", &colorNum, &end), end > 0)
, проверив, что %n
записал что-то в end
, вы также проверите, что все до %n
соответствует правильно.