2016-12-27 3 views
-1

Я начинаю программировать на C.Как отлаживать эту базовую программу OR?

Я написал программу, которая не работает из-за ее функциональности «ИЛИ». Вот рабочий фрагмент кода:

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

int main() 
{ 
    char englishTest = 'yup'; 

    if ((englishTest == 'yup') || (englishTest == 'yep') || (englishTest == 'yas') || (englishTest == 'yah')) 
    { 
     printf("You may pass \n"); 
    } 
    else 
    { 
     printf("You shall not pass \n"); 
    } 
    return 0; 
} 

Почему выход «Вы должны не пройти», когда ожидается выход "Вы должны пройти?

+5

'char englishTest = 'yup';' ... и ваш компилятор не кричал? –

+1

Вы сравниваете многосимвольные литералы, а не строки. См. Больше здесь: http://stackoverflow.com/questions/28189073/why-this-loop-is-running-infinite-times-in-c – myaut

+2

Синтаксис - все неправильно. Попробуйте 'char englishTest [] =" yup ";' и т. Д., А затем 'strcmp (englishTest," yup ") == 0' и т. Д. Не забудьте' #include '. –

ответ

2

Предполагается, что это 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 (||) здесь ничего не сломают.

+0

Привет, спасибо за ваш ответ :) Когда я попробовал - char englishTest [] = 'yup', тогда кодовые блоки сказали мне «error: invalid initializer». Когда я попробовал - char * englishTest = 'yup', это сработало. Что может быть причиной этого? –

+0

@MythicCocoa компилятор выдаст вам предупреждения для '' yup'' - обратите внимание на них. –

+0

@ WeatherVane на самом деле, так оно и было. Я не очень много думал об этих предупреждениях, если код работал. Я узнал свой урок :) –

Смежные вопросы