Оценка серийных ответов с помощью оператора if

Я пытаюсь прочитать состояние сети с модема с помощью микроконтроллера Atmel, а затем отладить / перезапустить на основе определенных ответов о состоянии. Я делаю это с помощью следующего кода (и это работает):

scanf("%s", state);
printf_P(PSTR("%s\n%d\n"),state,tempstate);

    if (*state=='4'|| *state=='7' || *state == '9' || *state == '11' || *state == '12' || *state == '13' ||*state == '19' || *state == '30' || *state == '31')
    {
        count++;
        if(count == 5)
            {
                send_string("ATZ\r");
                _delay_ms(10000);
                count = 0;
            }
        else{}
    }

Однако, когда я пытаюсь сделать что-то похожее в прерывании смены штырька (используется для выключателя двери), я могу прочитать ответ модема "ОК", но при попытке подтвердить этот ответ оператором if ответ не распознается. Увидеть ниже.

    send_string("AT\r\n");
    scanf("%s", reply);
    printf_P(PSTR("\n%s"),reply);

    if (*reply == 'OK')
    {
    printf_P(PSTR("\nWill text contact now."));
    send_string("AT*SMSM2M=\"15555555TESTING\"\r");
    scanf("%s", reply);
    }

Мне не удается получить код для ввода этого оператора if после получения сообщения "ОК". Любая помощь приветствуется.

1 ответ

Решение

См. http://en.cppreference.com/w/c/string/byte/strcmp

Для сравнения строки "OK" (обратите внимание на другие кавычки, чем в вашем коде)
с чем char* reply указывает на использование

strcmp(reply, "OK")

Обратите внимание, что это возвращает 0 для идентичности.
Следовательно, if похоже на то, что вы пытаетесь было бы

if(!strcmp(reply, "OK"))

Как упомянуто dbush в комментарии:
Обратите внимание, что вы должны сделать это и для сравнения чисел, так как у вас есть строки, содержащие числа, а не фактические числа.
Некоторые из них (те, которые сравниваются с одним символом) вводят в заблуждение, потому что вы случайно сравниваете первый символ вашей строки ответа с односимвольным буквенным символом.

(Как обычно для "строки" читайте "завершенную нулем последовательность char с.)

Другие вопросы по тегам