2017-01-09 8 views
0

Оператор if выполняется, как если бы условия были выполнены, даже если они не были выполнены. Я пробовал перемещать биты кода и даже переписывал оператор if по-другому, но он не изменил результат. Кто-нибудь знает, что я делаю неправильно?Если оператор выполняется, выполняются ли условия или нет

#include <iostream> 
#include <string> 
using namespace std; 

double num, num2, num3, num4, num5, num6, sum; 
char input; 
bool continueBool = true; 
string bob; 

void math() 
{ 


    cout << "Please enter your first number" << endl; 
    cin >> num; 

    cout << "Please enter your second number?" << endl; 
    cin >> num2; 

    cout << "Please enter your third number?" << endl; 
    cin >> num3; 

    cout << "Please enter your fourth number" << endl; 
    cin >> num4; 

    cout << "Please enter your fith number?" << endl; 
    cin >> num5; 

    cout << "Please enter your sixth number?" << endl; 
    cin >> num6; 

    sum = num + num2 + num3 + num4 + num5 + num6; 


} 

void ifStatement() { 

    if (bob == "no", "No", "NO", "nO") { 

     continueBool = false; 

     cout << "Good bye!" << endl; 

    } 
} 


int main() 
{ 
    while (continueBool = true) { 


     math(); 

     cout << "The sum of your numbers is: " << sum << endl; 

     cout << "Would you like to add any more numbers together?" << endl; 

     cin >> bob; 

     ifStatement(); 

     return 0; 


    } 



} 
+1

предупреждение: 'while (continueBool = true)' -> 'while (continueBool)' ..... Лучше, чем 'while (continueBool == false == false)'. Итог: проверка того, является ли логическое '== true', никогда не имеет смысла, просто проверьте логическое значение. –

+0

Всегда 'return'ing изнутри цикла делает цикл: _not-a-loop_. Хотя, когда у вас бесконечная ошибка цикла, возможно, это не так. –

+0

См. Также: http://stackoverflow.com/q/16475032/224704 –

ответ

0
bob == "no", "No", "NO", "nO" 

не делать то, что вы думаете, он делает. Вы имеете в виду сделать:

bob == "no" || 
bob == "No" || 
bob == "NO" || 
bob == "nO" 
2

Это действительно поддельным

if (bob == "no", "No", "NO", "nO") 

Вам нужно разбить его с логическим ИЛИ вместо

if (bob == "no" || bob == "No" || bob == "NO" || bob == "nO") 

Как стоять, это if (bob == "no", "No", "NO", "nO") бы эквивалентно if("nO") как эффект от оператора запятой.

+0

Это исправило его, но теперь он не продолжает цикл while? –

+1

@ScottMcgonigle Но он решил проблему, о которой вы просили? Кажется несколько недопустимым, чтобы не повышать ответ только потому, что в вашем коде еще больше ошибок и выше первого, с которым вы столкнулись. –

0

Это часть примечания к вашему вопросу, но в этом контексте вы можете рассмотреть возможность преобразования ответа в нижний регистр (или в верхний регистр) перед его сопоставлением.

Таким образом, вы можете просто использовать if (tolower(bob) == "no")


Вот пример того, как сделать использовать функцию tolower

http://www.cplusplus.com/reference/cctype/tolower/

/* tolower example */ 
#include <stdio.h> 
#include <ctype.h> 
int main() 
{ 
    int i=0; 
    char str[]="Test String.\n"; 
    char c; 
    while (str[i]) 
    { 
    c=str[i]; 
    putchar (tolower(c)); 
    i++; 
    } 
    return 0; 
} 
0

Ваша задача цикла может следует пояснить:

while (continueBool = true)

следует читать

while (continueBool == true).

Поскольку ваш код в настоящее время стоит, вы устанавливаете его в true вместо проверки значения, поэтому он никогда не выйдет.

+1

Еще лучше: 'while (continueBool)'. –

+0

@PeteBecker Я считаю это вопросом предпочтения. Я подозреваю, что современные компиляторы выдадут одинаковые результаты в обеих формах. –

+0

Ну, да, они будут производить тот же код.Но оператор 'if' принимает логическое значение, поэтому преобразование' continueBool' в boolean с сопоставлением бессмысленно и с простой опечаткой, как в этом примере, неверно. –

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