Предполагается, что это C
, а не язык сценариев.
Есть две проблемы в этом коде:
char englishTest = 'yup';
englishTest
объявлен как char
который в C
является целочисленный тип. Он может содержать только один символ, но вы пытаетесь сохранить в нем три символа.
То, что вы, вероятно, имел в виду,:
char englishTest[] = "yup";
Пожалуйста, обратите внимание на квадратные скобки, которые обозначают array (of chars). Размер массива может быть опционально задан между скобками. Здесь он не указан, и компилятор использует наименьшее значение, которое может содержать строку, используемую для initialization ("yup"
). Это наименьшее значение: 4
: есть 3
символов в "yup"
, но C
strings заканчиваются the NULL
character ('\0'
).
Вторая проблема в вашем коде - сравнение строк. Строки не являются примитивными типами в C
. Это массивы персонажей. Непосредственное сравнение двух строк с использованием comparison operators не дает ожидаемого результата. Он сравнивает адреса в памяти, где хранятся две строки, а не их символы.
Стандартная библиотека C
предоставляет несколько функций для сравнения двух строк. Наиболее простым является string comparison function является strcmp()
. Он возвращает 0
, если две строки идентичны, отрицательное значение, если первая строка находится перед второй строкой в dictionary order или отрицательное значение в противном случае.
Ваш код сравнения должен быть (обратите внимание на C
строки заключены в двойные кавычки ""
):
if (strcmp(englishTest, "yup") == 0 || strcmp(englishTest, "yep") == 0 ||
strcmp(englishTest, "yas") == 0 || strcmp(englishTest, "yah") == 0)
P.S. Операторы OR (||
) здесь ничего не сломают.
'char englishTest = 'yup';' ... и ваш компилятор не кричал? –
Вы сравниваете многосимвольные литералы, а не строки. См. Больше здесь: http://stackoverflow.com/questions/28189073/why-this-loop-is-running-infinite-times-in-c – myaut
Синтаксис - все неправильно. Попробуйте 'char englishTest [] =" yup ";' и т. Д., А затем 'strcmp (englishTest," yup ") == 0' и т. Д. Не забудьте' #include '. –