2017-02-08 53 views
-1

我想编译这个程序在C(一CS50在线类),并不断收到以下错误:非void函数错误

fifteen.c:233:1:错误:控制可能到达非void函数结束[-Werror,-Wreturn型] }

我不是问我的代码的逻辑,但更多的寻找,我已经错过了语法错误上一个小时。代码如下。谢谢!

bool move(int tile) 
{ 
    for (int i = 0; i < d - 1; i++){ 

     for (int j= 0; j < d - 1; j++){ 

      if (tile == board[i][j]){ 

       if (board[i+1][j] == tile){ 
        board[i+1][j] = 0; 
        board[i+1][j] = tile; 
        return true; 
             } 
       else if (board [i-1][j] == 0){ 
        board[i-1][j] = tile; 
        board [i-1][j] = 0; 
        return true; 
             } 
       else if (board [i][j+1] == 0){ 
        board[i][j+1] = tile; 
        board [i][j+1] = 0; 
        return true; 
             } 
       else if (board [i][j-1] == 0){ 
        board[i][j-1] = tile; 
        board [i][j-1] = 0; 
        return true; 
             } 
    } 
    return false; 
} 
} 
} 
+0

纠正你的缩进,它可能会变得清晰。记住编译并不知道在运行时所有的东西都会有什么值,所以它不会为你做任何假设(比如假设你的一个if语句总是成立)...... – John3136

回答

0

此错误是说你的方法能到达终点,而不返回的值。这种情况发生在这种情况下,因为你的括号不合适。

尝试以下操作:

bool move(int tile) { 
    for (int i = 0; i < d - 1; i++) { 
      for (int j = 0; j < d - 1; j++) { 
       if (tile == board[i][j]) { 
        if (board[i+1][j] == tile) { 
         board[i+1][j] = 0; 
         board[i+1][j] = tile; 
         return true; 
        } 
        else if (board [i-1][j] == 0){ 
         board[i-1][j] = tile; 
         board [i-1][j] = 0; 
         return true; 
        } 
        else if (board [i][j+1] == 0){ 
         board[i][j+1] = tile; 
         board [i][j+1] = 0; 
         return true; 
        } 
      } 
      else if (board [i][j-1] == 0){ 
       board[i][j-1] = tile; 
       board [i][j-1] = 0; 
       return true; 
      } 
     } 
    } 
    return false; 
} 
+0

注意,你错过了最后一步,括号中的外部if语句之前,其他 - 如果恭维。 – igoldthwaite

+0

热潮!它现在汇编,伊戈尔特韦特!我会尽快接受答案。这样一个小小的错误会导致你在一个小时内将你的头撞到墙上,这太疯狂了。正如你所看到的,我是一名新秀。 – rookie