簡體   English   中英

為什么 if else 結構在 c++ 中不起作用?

[英]Why isn't the if else structure working in c++?

我一直在嘗試在 c++ 中編寫 tictactoe,但我不知道為什么 if else 語句沒有被執行。

    #include <iostream>
#include <conio.h>
#include <cstdlib>

using namespace std;

char XorO;

int n;

char a = '1';
char b = '2';
char c = '3';
char d = '4';
char e = '5';
char f = '6';
char g = '7';
char h = '8';
char i = '9';

int charchange[] = {79, 80, 81, 575, 6786, 75, 7879, 67697, 689698};
void Welcome() // FUNCTION1
{
    cout << "\nWelcome to Tic-Tac-toe!!!\n";
    cout << "You are going to play with the computer!!\n";
    cout << "Press X to choose X or press O to choose O for the game!!: ";
}

void framework() //FUNCTION2
{
    cout << " _ _ _ " << endl;
    cout << "| | | |" << endl;
    cout << "|"<< a <<"|"<< b <<"|"<< c <<"|" << endl;
    cout << "|"<< d <<"|"<< e <<"|"<< f <<"|" << endl;
    cout << "|"<< g <<"|"<< h <<"|"<< i <<"|" << endl;
    cout << "|_|_|_|" << endl;
}

int main()
{
    aiyeee:
    Welcome();
    cin >> XorO;  ////////////GETS EXCECUTED TILL HERE
    if (XorO == 'X')          ////////////////////////DSEN'T EXECUTE
    {
        for(n=1;n>=9;n++)
     {
        if(n%2 != 0){
        framework();
        cout << "\nOk:)";
        aeneas:
        cout << " Your turn!! Which number to change to X: ";
        cin >> charchange[(n-1)];
        for (int ty = 1; ty <= 9; ty++)
        {
            if(charchange[(n-1)] != ty)
            {
                cout << "INVALID INPUT!!\n";
                goto aeneas;
            }
        }
        switch(charchange[(n-1)])
        {
            case 1:
            if (a == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            a = 'X';
            framework();
            break;
            case 2:
            if (b == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            b = 'X';
            framework();
            break;
            case 3:
            if (c == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            c = 'X';
            framework();
            break;
            case 4:
            if (d == 'O')
            {
                cout << "\nAlready Changed to O!!\n";
                goto aeneas;
            }
            d = 'X';
            framework();
            break;
            case 5:
            if (e == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            e = 'X';
            framework();
            break;
            case 6:
            if (f == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            f = 'X';
            framework();
            break;
            case 7:
            if (g == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            g = 'X';
            framework();
            break;
            case 8:
            if (h == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            h = 'X';
            framework();
            break;
            case 9:
            if (i == 'O')
            {
                cout << "\nAlready Changed to 'O'!!\n";
                goto aeneas;
            }
            i = 'X';
            framework();
            break;
        }
        if(n>4)
        {
            if ((a==b && b==c)||(d==e && e==f)||(g==h && h==i)||(a==d && d==g)||(b==e && g==h)||(c==f && f==i)||(a==e && e==i)||(c==e && e==f))
            {                   
                cout << "YOU WIN!!!\n";
                goto allagulla;
            }
        }
        }

        else if(n%2 == 0)
        {
            aghhg:
            charchange[n-1] = ((rand()%9) + 1);
            switch (charchange[n-1])
            {
                case 1:
                if(a == 'X') 
                    {
                        goto aghhg;
                    }
                a = 'O';
                framework();
                break;
                case 2:
                if(b == 'X') 
                    {
                        goto aghhg;
                    }
                b = 'O';
                framework();
                break;
                case 3:
                if(c == 'X') 
                    {
                        goto aghhg;
                    }
                c = 'O';
                framework();
                break;
                case 4:
                if(d == 'X') 
                    {
                        goto aghhg;
                    }
                d = 'O';
                framework();
                break;
                case 5:
                if(e == 'X') 
                    {
                        goto aghhg;
                    }
                e = 'O';
                framework();
                break;
                case 6:
                if(f == 'X') 
                    {
                        goto aghhg;
                    }
                f = 'O';
                framework();
                break;
                case 7:
                if(g == 'X') 
                    {
                        goto aghhg;
                    }
                g = 'O';
                framework();
                break;
                case 8:
                if(h == 'X') 
                    {
                        goto aghhg;
                    }
                h = 'O';
                framework();
                break;
                case 9:
                if(i == 'X') 
                    {
                        goto aghhg;
                    }
                i = 'O';
                framework();
                break;
            }
            if(n>4)
        {
            if ((a==b && b==c)||(d==e && e==f)||(g==h && h==i)||(a==d && d==g)||(b==e && g==h)||(c==f && f==i)||(a==e && e==i)||(c==e && e==f))
            {                   
                cout << "COMPUTER WINS!!\n";
                break;
            }
        }
        }
    }
    }
    else if (XorO == 'O')
    {

    }

    else
    {
        cout << "\nINVALID INPUT!!!\n";
        goto aiyeee;
        cin >> XorO;    
    }

    allagulla:
    cout << "\nWanna play again?(y/n) ";/////////////////////COMES DOWN STRAIGHT HERE AFTER THE PREV COMM
    char yesno;
    yesno = getche();
    if (yesno == 'y')
        {
            goto aiyeee;
        }
    }

main() 啟動后,它輸入 XorO,但歸根結底是想再玩一次嗎? 說真的,我不知道為什么:(對不起,很長的程序可能會更短,實際上我正在學習 c++。

了解如何使用調試器

使用-g編譯:

g++ -Wall -pedantic -g -o demo demo.cpp

運行調試器:

gdb demo

在可疑行中設置斷點:

(gdb) break 44
Punto de interrupción 1 at 0x1502: file demo.cpp, line 44.
(gdb) run

詢問調試器:

Breakpoint 1, main () at demo.cpp:44
44      if (XorO == 'X')          ////////////////////////DSEN'T EXECUTE
(gdb) print XorO
$1 = 88 'X'
(gdb) step
46          for(n=1;n>=9;n++)
(gdb) step
259     cout << "\nWanna play again?(y/n) ";/////////////////////COMES DOWN STRAIGHT HERE AFTER THE PREV COMM
(gdb) print n
$2 = 1
(gdb)

你有看到? n永遠不會大於或等於 9,因此會跳過整個for循環。

另一方面,嘗試為那些審查您的代碼的人簡化任務,我們大多數人沒有conio庫,我不得不用getc(stdin)替換getche ,順便說一下getche返回一個int ,而不是一個char .

char yesno;

應該

int yesno;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM