我在本文中所做的所有开关都遇到了麻烦,我的问题是我需要写什么,这样才不会发生此问题?我应该选择哪种类型?
#include <iostream>
using namespace std;
void tablero (int i, int j);
char matriz [3][3];
int comprueba ();
void jugador1 ();
void jugador2 ();
int main (){
int comp,i,j;
cout<<"Bienvenido al 3 en ralla!"<<endl;
cout<<" -----------------------"<<endl;
for (i=0;i<=2; i++){
for(j=0;j<=2; j++){
matriz [i][j]='-';
}
}
do{
jugador1();
jugador2();
}
while(comp==0);
cout<<"GRACIAS POR JUGAR <3!";
return 0;
}
void tablero (int i,int j)
{
cout << matriz[0][0] << " | " << matriz[0][1] << " | " << matriz[0][2] <<endl;
cout << matriz[1][0] << " | " << matriz[1][1] << " | " << matriz[1][2] <<endl;
cout << matriz[2][0] << " | " << matriz[2][1] << " | " << matriz[2][2] <<endl;
return;
}
int comprueba (){
int comp;
switch (matriz[0][0]==matriz[0][1]==matriz[0][2]){ //horizontal 1
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[1][0]==matriz[1][1]==matriz[1][2]){ //horizontal 2
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[2][0]==matriz[2][1]==matriz[2][2]){ //horizontal 3
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[0][0]==matriz[1][0]==matriz[2][0]){ //vertical 1
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[0][1]==matriz[1][1]==matriz[2][1]){ //vertical 2
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[0][2]==matriz[1][2]==matriz[2][2]){ //vertical 3
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[0][0]==matriz[1][1]==matriz[2][2]){ //oblícua 1
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
switch (matriz[0][2]==matriz[1][1]==matriz[2][0]){ //oblícua 2
case 'X':
cout<<"Jugador 1 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
case 'O':
cout<<"Jugador 2 es el ganador! Enhorabuena!"<<endl;
comp=1;
break;
default:
comp=0;
}
return comp;
}
void jugador1 (void){
int i, j;
cout<<"Jugador 1, introduce una posicion"<<endl<<"Fila:";
cin>>i;
cout<<endl<<"Columna:"<<endl;
cin>>j;
i=i-1;
j=j-1;
if (i>3 || j>3){
cout<<"Esta cordenada no existe, introduce otra jugador 1";
}
else{
matriz [i][j]='X';
tablero(i,j);
}
comprueba ();
return ;
}
void jugador2 (void){
int i, j;
cout<<"Jugador 2, introduce una posicion"<<endl<<"Fila:";
cin>>i;
cout<<endl<<"Columna:"<<endl;
cin>>j;
i=i-1;
j=j-1;
if (i>3 || j>3){
cout<<"Esta cordenada no existe, introduce otra jugador 2";
}
else{
matriz [i][j]='O';
tablero(i,j);
}
comprueba ();
return ;
}
谢谢大家来到这里,如果您对如何解决这个问题有任何想法,请向它解释,生病的将会大大影响我们<3 !!
答案 0 :(得分:4)
首先matriz[1][0]==matriz[1][1]==matriz[1][2]
不要做您梦dream以求的事情。由于它是==
测试,因此它的值为bool
(第二个==
会将bool
的结果matriz[1][0]==matriz[1][1]
-与{{ 1}}-char
-的值;没有您希望发生的隐含连词)。您需要详细了解C++ operators及其precedence(尤其是comparison operators)。
那么matriz[1][2]
永远不能等于bool
。它可以是'X'
或true
(即使将其转换为false
,也永远不会是char
;在大多数系统上,'X'
是 NUL 字符;几乎每台计算机上都使用ASCII或UTF-8,(char)false
是(char)true
航向起始 control character,您可能不需要它。
不要忘记在编译器中启用所有警告和调试信息。如果使用GCC,请使用\001
进行编译。改进您的代码,使其不发出警告。
然后阅读How to debug small programs
我的建议:请在几天后停止编码,然后花时间阅读更多。首先阅读一本不错的C++ programming书(完整)。查看一些C++ reference网站。研究如何use your compiler。学习use your debugger和一小部分version control(例如git,它有出色的教程视频;您只想学习一小部分g++ -Wall -Wextra -g
)。然后回到您的程序(了解基础知识后,最好完全将其废弃,然后再次编写代码;您可能会写几十行,对它们进行调试,并改善您的代码用另外几十行代码进行编码,然后再次调试,直到满意为止;遵循iterative and incremental development方法。)
顺便说一句,它可以帮助研究某些现有小型free software项目的源代码(例如在github,gitlab或Linux发行版中) 。那可能是鼓舞人心的。
PS。即使花费了一个多小时,也可以按照此处的所有超链接进行操作。