如何在多个函数上返回值,或者声明一个隐式函数?



我目前正在制作一个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));

}

我已经尝试使用一个结构体,但我仍然需要通过所有的函数传递它,对吗?欢迎任何建议:)谢谢了

  1. 返回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) {

  1. 传递位置以保存新状态为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) { 

最新更新