控制可能到达非空函数的结尾 [-Wreturn-type]|

标签 c

好的,我有一个 C 语言的代码。它是零和十字。 但我不知道我的'sprawdzenie'(检查)。 IDE 向我发送控制可能会到达非空函数 [-Wreturn-type] 的结尾。 我不知道出了什么问题,但我知道我的代码并不漂亮。

#include <stdio.h>
#include <stdlib.h>

char plansza[3][3];
void wczytaj()
 {
printf(" %c |%c | %c\n",plansza[0][0],plansza[0][1],plansza[0][2]);
printf("-------\n");
printf(" %c |%c | %c\n",plansza[1][0],plansza[1][1],plansza[1][2]);
printf("-------\n");
printf(" %c |%c | %c\n",plansza[2][0],plansza[2][1],plansza[2][2]);
}
char sprawdzenie()
{
 if((plansza[0][0]&&plansza[0][1]&&plansza[0][2] =='x' )|| 
 (plansza[0][2]&&plansza[1][1]&&plansza[2][0]=='x') || 
 (plansza[0][2]&&plansza[1][2]&&plansza[2][2]=='x') || 
 (plansza[2][0]&&plansza[2][1]&&plansza[2][2]=='x') ||
 (plansza[1][0]&&plansza[1][1]&&plansza[1][2]=='x') || 
 (plansza[0][1]&&plansza[1][1]&&plansza[2][1]=='x') || 
 (plansza[0][0]&&plansza[1][1]&&plansza[2][2]=='x') || 
 (plansza[0][0]&&plansza[1][0]&&plansza[2][0]=='x'))
 {
   return 1;

}else if((plansza[0][0]&&plansza[0][1]&&plansza[0][2]=='o') ||   
 (plansza[0][0]&&plansza[1][0]&&plansza[2][0]=='o') || 
 (plansza[0][0]&&plansza[1][1]&&plansza[2][2]=='o') || 
 (plansza[0][1]&&plansza[1][1]&&plansza[2][1]=='o') || 
 (plansza[1][0]&&plansza[1][1]&&plansza[1][2]=='o') || 
 (plansza[2][0]&&plansza[2][1]&&plansza[2][2]=='o') ||  
 (plansza[0][2]&&plansza[1][2]&&plansza[2][2]=='o') ||
 (plansza[0][2]&&plansza[1][1]&&plansza[2][0]=='o'))
  {
    return 2;
}

}
void gracz_x()
{
   unsigned int i=3;
   unsigned int j=3;
   wczytaj();
   printf("Podaj wiersz i kolumnę: ");
   scanf("%u %u",&i,&j);
    if(plansza[i][j]!='o')
     plansza[i][j]='x';
  else{
    printf("Podaj poprawne współrzędne: ");
    scanf("%u %u",&i,&j);
    plansza[i][j]='x';
}
}
void gracz_o()
{
    unsigned int i=3;
    unsigned int j=3;
    wczytaj();
    printf("Podaj wiersz i kolumnę: ");
    scanf("%u %u",&i,&j);
    if(plansza[i][j]!='x')
    plansza[i][j]='o';
else{
    printf("Podaj poprawne współrzędne: ");
    scanf("%u %u",&i,&j);
    plansza[i][j]='o';
}

 }
 int main()

 {

char wynik=0;
int kolejka = 0;
while(wynik==0)
{
    if(kolejka==0)
    {
        gracz_o();

    }else{
        gracz_x();
    }
    kolejka=kolejka+1;
    wynik=sprawdzenie();
    if(kolejka==9){
        printf("remis");
        break;
    }
}
wczytaj();
if(wynik==1)
{
    printf("wygryw x\n");
}else if(wynik==2)
    {
        printf("wygryw o\n");
    }

return 0;  
  }

最佳答案

这意味着您的函数 sprawdzenie 应该返回 char 但它可能不会。您有一个 if 和一个 else if。如果这两个条件都不满足,该函数将结束并且不返回任何内容。这是不允许的,因为该函数应返回 char

在末尾添加默认返回值或添加 else block 以防止您的函数结束而不返回任何内容。

关于控制可能到达非空函数的结尾 [-Wreturn-type]|,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983738/

相关文章:

c - Yacc 找不到 YY_CURRENT_BUFFER

c++ - 如何使用 C 中的内部 C++ 类类型?

c - 微 Controller 编程

c - 字符串常量和字符常量

C Devoweler内存错误

c 中带有 select 的并发服务器 TCP

从windows到linux的交叉编译源

c - 指向未初始化的指针与为其分配内存后指向它

c - 希望通过 C 中等效的 ASCII 值将 int 存储在 char 数组中

在 C 中将字符串转换为 unsigned long long int