2016-01-09 9 views
-1

Как вы можете видеть из следующего, int result должно получить назначенное значение 1, если только int outcome равно 7 или 11. Однако, хотя в моделировании я запустил outcome было 9, оператор if выполнялся без изменений и присваивал значение result как 1.Оператор if if выполняется, даже если условия не выполняются.

Проблема в том, что я не уверен, что не так, потому что другие коды в инструкции не работают, только результат integer получает присвоенное значение.

#include <iostream> 
#include <algorithm> 
#include <ctime> 
#include <string> 

using namespace std; 


int main() 
{ 

    int bankroll=100; 
    int bet=1; 
    int die1[6]= {1,2,3,4,5,6}; 
    int die2[6]= {1,2,3,4,5,6}; 
    int outcome; 
    int point; 
    int result; 
    bool pointroll=false; 
    string resulttext; 
    random_shuffle(&die1[0],&die1[6]); 
    random_shuffle(&die2[0],&die2[6]); 

    outcome = die1[0] + die2[0]; 
cout << "The Outcome is " << outcome << endl; 
cout << "The Result is " << result << endl; 
    if(outcome==7 || outcome==11) 
    { 
     resulttext="Win!"; 
     result=1; 
     cout << "Am I running?" << endl; 
    } 
cout << "The Outcome is " << outcome << endl; 
cout << "The Result is " << result << endl; 

return 0;} 

Вот результат:

The Outcome is 9 
The Result is 0 
The Outcome is 9 
The Result is 1 

Edit: Я действительно не могу поверить, как я проглядел такую ​​простую вещь. Во-первых, я не назначал начальное значение. Спасибо всем, вопрос решен.

+0

Нет необходимости вносить изменения, которые говорят то же самое, что и ответы. Вот для чего нужны ответы. Вы указываете, что ответ правильный, приняв его. – Barmar

+1

Совет. Включите достойный уровень предупреждений компилятора (например, '-Wall -Wextra -pedantic' для gcc и clang) и исправить все из них. Компилятор прямо сказал бы вам о проблеме. –

+0

@Barmar Я фактически разместил редактирование перед проверкой ответов. Но ты прав. – SarpSTA

ответ

4

Если условие истинно, результат равен 1, так что это правда. Но в другом случае содержание результата не определено, поэтому оно может быть любым, даже позволяя компилятору изменять его по своему усмотрению как часть оптимизации. Вы должны либо инициализировать результат при его объявлении, либо добавить ветку else, где вы установите ее на альтернативное значение.

3

Вы не инициализировали результат, поэтому контент случайный мусор.

Если ваш IF работает, он перезаписывает его 1; если он не запускается, вы печатаете случайный мусор (что оказалось 1).

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