2016-08-13 37 views
-1

我爲兩位玩家寫了兩個函數。還有一個功能可以檢查獲勝條件。該程序正確執行,除非它沒有檢測到某人獲勝。所以檢查功能必定存在一些問題。Tic Tac Toe C程序沒有正確執行

#include<stdio.h> 
int P1(int, char []), P2(int, char []), check(int, char []); 
int main() 
{ 
    char a[10]= "---------" ; 
    int flag= 3, p, q; 
    while(flag== 3) 
    { 
     P1(p, a); 
     check(flag, a); 
     if(flag== 1) 
     { printf("P1 WINS");} 
     else 
     { 
      P2(q, a); 
      check(flag, a); 
      if(flag== 2) 
      {printf("P2 WINS");} 
     } 
    } 
return 0;} 

int P1(int p, char a[10]) 
{ 
    printf("P1: Which position?\n"); 
    scanf("%d", &p); 
    a[p-1]= 'X'; 
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0; 
} 

int P2(int q, char a[10]) 
{ 
    printf("P2: Which position?\n"); 
    scanf("%d", &q); 
    a[q-1]= '0'; 
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0; 
} 

int check(int flag, char a[10])//isme galti hai 
{ 
    if(a[0]==a[1]==a[2]=='X' || 
     a[3]==a[4]==a[5]=='X' || 
     a[6]==a[7]==a[8]=='X' || 
     a[0]==a[3]==a[6]=='X' || 
     a[1]==a[4]==a[7]=='X' || 
     a[2]==a[5]==a[8]=='X' || 
     a[0]==a[4]==a[8]=='X' || 
     a[2]==a[4]==a[6]=='X') 

    { 
     flag= 1; 
    } 

    else 

    { 
     if(a[0]==a[1]==a[2]=='0' || 
      a[3]==a[4]==a[5]=='0' || 
       a[6]==a[7]==a[8]=='0' || 
       a[0]==a[3]==a[6]=='0' || 
       a[1]==a[4]==a[7]=='0' || 
       a[2]==a[5]==a[8]=='0' || 
       a[0]==a[4]==a[8]=='0' || 
       a[2]==a[4]==a[6]=='0') 

     { 
      flag= 2; 
     } 
    } 
} 

返回標誌的值指出後,它仍然不能正常工作。

#include<stdio.h> 
int P1(int, char []), P2(int, char []), check(int, char []); 
int main() 
{ 
    char a[10]= "---------" ; 
    int flag= 3, p, q; 
    while(flag== 3) 
    { 
     P1(p, a); 
     flag= check(flag, a); 
     if(flag== 1) 
     { printf("P1 WINS");} 
     else 
     { 
      P2(q, a); 
      flag= check(flag, a); 
      if(flag== 2) 
      {printf("P2 WINS");} 
     } 
    } 
return 0;} 

int P1(int p, char a[10]) 
{ 
    printf("P1: Which position?\n"); 
    scanf("%d", &p); 
    a[p-1]= 'X'; 
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0; 
} 

int P2(int q, char a[10]) 
{ 
    printf("P2: Which position?\n"); 
    scanf("%d", &q); 
    a[q-1]= '0'; 
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0; 
} 

int check(int flag, char a[10])//isme galti hai 
{ 
    if(a[0]==a[1]==a[2]=='X' || 
     a[3]==a[4]==a[5]=='X' || 
     a[6]==a[7]==a[8]=='X' || 
     a[0]==a[3]==a[6]=='X' || 
     a[1]==a[4]==a[7]=='X' || 
     a[2]==a[5]==a[8]=='X' || 
     a[0]==a[4]==a[8]=='X' || 
     a[2]==a[4]==a[6]=='X') 

    { 
     flag= 1; 
    } 

    else 

    { 
     if(a[0]==a[1]==a[2]=='0' || 
      a[3]==a[4]==a[5]=='0' || 
       a[6]==a[7]==a[8]=='0' || 
       a[0]==a[3]==a[6]=='0' || 
       a[1]==a[4]==a[7]=='0' || 
       a[2]==a[5]==a[8]=='0' || 
       a[0]==a[4]==a[8]=='0' || 
       a[2]==a[4]==a[6]=='0') 

     { 
      flag= 2; 
     } 
    } 
    return flag; 
} 

如果試圖用數字替換字符而不是0而X使用8和9但是沒有正確執行。

+0

請說明問題是什麼。說檢查功能有問題不是問題。另外請添加你迄今爲止嘗試修復該功能所做的事情。 –

+0

這可能是一個作業問題 –

+0

您想使用調試器來跟蹤代碼,以瞭解實際發生的情況。 – alk

回答

2

你的檢查函數中的條件語句也有一些問題。對於那個很抱歉。我對您的代碼進行了一些更正並進行了測試,工作正常。

#include<stdio.h> 
int P1(int, char []), P2(int, char []), check(int, char []); 
int main() 
{ 
    char a[10]= "---------" ; 
    int flag= 3, p, q; 
    while(flag== 3) 
    { 
     P1(p, a); 
     flag= check(flag, a); 
     if(flag== 1) 
     { printf("P1 WINS");} 
     else 
     { 
      P2(q, a); 
      flag= check(flag, a); 
      if(flag== 2) 
      {printf("P2 WINS");} 
     } 
    } 
return 0;} 

int P1(int p, char a[10]) 
{ 
    printf("P1: Which position?\n"); 
    scanf("%d", &p); 
    a[p-1]= 'X'; 
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0; 
} 

int P2(int q, char a[10]) 
{ 
    printf("P2: Which position?\n"); 
    scanf("%d", &q); 
    a[q-1]= '0'; 
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0; 
} 

int check(int flag, char a[10])//isme galti hai 
{ 
    if( 
    (a[0]== 'X' && a[1]== 'X' && a[2]=='X') || 
    (a[3]== 'X' && a[4]== 'X' && a[5]=='X') || 
    (a[6]== 'X' && a[7]== 'X' && a[8]=='X') || 
    (a[0]== 'X' && a[3]== 'X' && a[6]=='X') || 
    (a[1]== 'X' && a[4]== 'X' && a[7]=='X') || 
    (a[2]== 'X' && a[5]== 'X' && a[8]=='X') || 
    (a[0]== 'X' && a[4]== 'X' && a[8]=='X') || 
    (a[2]== 'X' && a[4]== 'X' && a[6]=='X')) 
    { 
     flag= 1; 
    } 

    else 

    { 
     if( 
    (a[0]== '0' && a[1]== '0' && a[2]=='0') || 
    (a[3]== '0' && a[4]== '0' && a[5]=='0') || 
    (a[6]== '0' && a[7]== '0' && a[8]=='0') || 
    (a[0]== '0' && a[3]== '0' && a[6]=='0') || 
    (a[1]== '0' && a[4]== '0' && a[7]=='0') || 
    (a[2]== '0' && a[5]== '0' && a[8]=='0') || 
    (a[0]== '0' && a[4]== '0' && a[8]=='0') || 
    (a[2]== '0' && a[4]== '0' && a[6]=='0')) 

     { 
      flag= 2; 
     } 
    } 
    return flag; 
} 

ETA:看看這段代碼,在你嘗試編譯並運行它之前,你期望結果是什麼?

int main(void) 
{ 
    int a = 0; 
    int b = 0; 

    if (a == b == 0) 
     fprintf(stdout, "Both are zero.\n"); 
    else 
     fprintf(stdout, "both are not zero.\n"); 

    exit(EXIT_FAILURE); 
} 

認爲它是這樣 - 評估條件爲真(1)或假(0),......做向後在你的腦袋:

if (a == b == 0) 

現在,如果我們分配a和b爲0的值:

int a = 0, b = 0; 

的條件進行評估從而:

b == 0 

首先,b == 0部分,這是真的,我們知道b == 0,因爲我們爲它賦值了...... byut現在在解決第一個條件之後表達式是什麼?

if (a == 1) 

因爲b == 0的計算結果是真的(1),你會看到嗎?

可以以這種方式完成作業:

int a = b = 0; 

但由於條件的他們是如何解決的表情。

希望這會有所幫助。

+0

我編輯了代碼並返回了標誌。新代碼與原始代碼一起出現在我的問題中。 –

+0

酷 - 它解決了這個問題嗎? – Nunchy

+0

不,它執行相同的方式。 –