2015-07-14 5 views
0

Программа пропускает мои циклы и концы. Супер разочарование. Я даже поставил значение AnsCheck в false до цикла while. Не повезло. Программа не делает ничего из цикла While. Вот соответствующий код:Почему мой цикл While Loop пропускается? C++

bool AnsCheck; 
AnsCheck = false; 
while (AnsCheck = false) 
{ 
    getline(cin, Ans1); 
    if (Ans1 != "T" || Ans1 != "F") 
    { 
     cout << "Please Enter T for true or F for False" << endl; 
     cout << "answer not T or not F" << endl; // debugging 
    } 
    else 
    { 
     AnsCheck = true; 
     cout << "changed bool to true" << endl; 
    } 
} 
+3

И поскольку это иногда случается, что люди используют назначение, где хотят использовать операторы сравнения, золотое правило: Константы влево. Если бы вы написали '' while (false = AnsCheck) '' вы бы получили ', то не можете присваивать постоянному значению'. – BitTickler

+0

Я удивлен, что ваш компилятор не предупредил вас о том, что назначение используется как bool. Вероятно, вы должны включить '-Wall' (или его эквивалент в вашем компиляторе). – Alejandro

ответ

5

Вы должны использовать оператор сравнения на равенство == вместо оператора присваивания =.

while (AnsCheck == false) { 
    // ... 
} 

Кроме того, как вы упомянули в комментарии ниже этого ответа, условие в вашем случае утверждение никогда не оценивается как истинное. Чтобы сравнить строки, вы должны использовать strcmp, который возвращает 0, когда содержимое обеих c-строк равно. См. this reference для получения дополнительной информации.

if (strcmp(Ans1, "T") != 0 && strcmp(Ans1, "F") != 0) { 
    // ... 
} 
+0

СПАСИБО. я чувствую себя длинным. – RIDDLEisVoltron

+0

@RIDDLEisVoltron Добро пожаловать. Я рад, что смогу помочь! – ndmeiri

+0

Это что-то похожее на цикл If? У меня такая же проблема. Оператор If не распознает действительный ввод F или T. – RIDDLEisVoltron

0

(AnsCheck = ложь)


Вы должны написать это сравнение в другом порядке, так что компилятор может генерировать ошибку.

(false = AnsCheck) 

Это сложный переход к обучению. Проверьте свой стандарт кодирования.

0

Как уже отмечалось, используя оператор сравнения «==» вместо того, чтобы сообщать компилятору, который вы назначаете, используя «=», и все должно быть хорошо.

Изменить это:

while (AnsCheck = false) 

Для этого:

while (AnsCheck == false) 

Надеется, что это помогает. Ура!

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