Возникли проблемы с strcmp() - код компилируется, но, похоже, не работает

Я пытаюсь заставить пользователя дать мне оператор (либо +,-,/,*). Чтобы убедиться, что он / она делает это, я написал этот код:

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



int main(void)
{
char operator;

printf("Enter operator: (+, -, *, /) \n");

do { scanf("%c", &operator); }
while ((strcmp(&operator, "+") != 0) || (strcmp(&operator, "-") != 0) || (strcmp(&operator, "*") != 0) || (strcmp(&operator, "/") != 0));
}

То, что в конечном итоге происходит, - цикл включается и выключается, даже если я ввожу правильный оператор. Любая помощь приветствуется. Спасибо:)

Изменить: (Фиксированный код)

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



int main(void)
{
char operator;

printf("Enter operator: (+, -, *, /) \n");

    do { scanf(" %c", &operator); }
 while ((strcmp(&operator, "+") != 0) && (strcmp(&operator, "-") != 0) && (strcmp(&operator, "*") != 0) && (strcmp(&operator, "/") != 0));

}

2 ответа

Решение

Функция strcmp принимает строку с нулем в конце, а не символ По этой причине использование

strcmp(&operator, "+")

является причиной неопределенного поведения.

Ваш код может быть так же просто, как

while ((operator != '+') && ...) 

Обратите внимание, что я также изменил || в &&,

Вам также понадобится место перед "%c" как это " %c" так что если входной цикл повторяется, он очищает любой newline это было оставлено во входном буфере.

РЕДАКТИРОВАТЬ: Вы, кажется, не сделал правильное исправление, я предлагаю

do {
    scanf(" %c", &operator);
} while (operator != '+' && operator != '-' && operator != '*' && operator != '/');

Объявите оператор переменной следующим образом

char operator[2] = { '\0' };

И используйте это как

do { scanf("%c ", operator); }
while ((strcmp( operator, "+") != 0) && (strcmp(operator, "-") != 0) && (strcmp(operator, "*") != 0) && (strcmp(operator, "/") != 0));
}

Примите во внимание, что вместо использования многочисленных strcmp Вы могли бы использовать одну функцию strchr

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