我目前正在制作一个TicTacToe,我通过几个函数传递2个值。在函数之后,我需要将值返回给main()函数,或者调用第一个函数(这里它被命名为'eingabe')。遗憾的是,我不知道如何在4个函数中传递2个值,或者如何调用一个"尚未声明"的函数。函数。
你可以看到我的代码:
#include <stdio.h>
#include <stdlib.h>
char spielfeld(char symbol[3][3], int counter){
printf("n");
for(int i=0; i<4;i++){
for(int j =0; j<3;j++){
printf("+---");
}
printf("+n");
if(i<3){
for(int k=0; k<3;k++){
if(symbol[i][k]== 0){
symbol[i][k]=" ";
}
printf("| %c ", symbol[i][k]);
}
printf("| ");
printf("%dn",i);
}
}
printf(" A B Cn");
counter = counter +1;
eingabe(counter, symbol);
return(symbol, counter);
}
char symbolset(int auswahl[2], char* spieler, char symbol[3][3], int counter){
for(int i=0; i<3;i++){
for(int j=0; j<3;j++){
if(auswahl[0]==i && auswahl[1]==j){
symbol[i][j]= *spieler;
}
else{
symbol[i][j]=0;
}
}
}
spielfeld(symbol, counter);
return(symbol, counter);
}
char umwandlung(char* eingabe, char* spieler, char symbol[3][3], int counter){
int auswahl[2];
char* chara="aa";
char* charb="bb";
if(eingabe[1]==48){
auswahl[0]=0;
}
else if (eingabe[1]==49)
{
auswahl[0]=1;
}
else{
auswahl[0]=2;
}
if(eingabe[0]==chara[0]){
auswahl[1]=0;
}
else if (eingabe[0]==charb[0])
{
auswahl[1]=1;
}
else{
auswahl[1]=2;
}
symbolset(auswahl, spieler, symbol, counter);
return(symbol, counter);
}
char eingabe(int counter, char symbol[3][3]){
char* spieler = "X";
if(counter%2==0){
spieler = "X";
}
else{
spieler = "O";
}
int auswahl[2];
char* eingabe= calloc(2, sizeof(char));
scanf("%s", eingabe);
printf("%d", eingabe[1]);
umwandlung(eingabe, spieler, symbol, counter);
return(symbol, counter);
}
int main(){
int counter = 0;
char symbol[3][3];
printf("%d,%c",eingabe(counter, symbol));
eingabe(counter, symbol);
printf("%d,%c",eingabe(counter, symbol));
}
我已经尝试使用一个结构体,但我仍然需要通过所有的函数传递它,对吗?欢迎任何建议:)谢谢了
- 返回
struct
接近OP的要求。
typedef struct {
char symbol[3][3];
int counter;
} ttt;
ttt spielfeld(char symbol[3][3], int counter) {
ttt t;
...
return t;
}
// or
ttt spielfeld(ttt state) {
// or
ttt spielfeld(ttt *state) {
- 传递位置以保存新状态为
struct *
这更符合C语言的习惯。
// Perhaps return an error flag should something go wrong
bool spielfeld(ttt *new_state, char symbol[3][3], int counter) {
// or
bool spielfeld(ttt *new_state, ttt *old_state) {