2017-04-11 77 views
-4

我需要帮助找到我通过Thor挑战Codeingame上的x和y值的差异替代方法所犯的错误。为什么这个代码只输出“”? (Codeingame的Thor挑战)

这里是游戏圈的代码:

// game loop 
    while (1) { 
     int remainingTurns; // The remaining amount of turns Thor can move. Do not remove this line. 
     cin >> remainingTurns; cin.ignore(); 
     int difx = lightX-initialTX; 
     int dify = lightY-initialTY; 
     float mathquot=dify/difx; 
     string out =""; 
     if(difx==0 || dify==0){ 
      if(difx=0){ 
       if(dify<0) out="W"; initialTY-=1; 
       if(dify>0) out="E"; initialTY+=1; 
      } 
      if(dify=0){ 
       if(difx<0) out="N"; initialTX-=1; 
       if(difx>0) out="S"; initialTX+=1; 
      } 
     }else{ 
      if(mathquot>0 && (difx>0 && dify>0)) out="SE"; initialTY +=1; initialTX+=1; 
      if(mathquot>0 && (difx<0 && dify<0)) out="NW"; initialTY -=1; initialTX-=1; 
      if(mathquot<0 && difx<0) out="SW"; initialTY +=1; initialTX-=1; 
      if(mathquot<0 && dify<0) out="NE"; initialTY -=1; initialTX+=1; 
     } 
     // Write an action using cout. DON'T FORGET THE "<< endl" 
     // To debug: cerr << "Debug messages..." << endl; 


     // A single line providing the move to be made: N NE E SE S SW W or NW 
     cout << out << endl; 
    } 
+3

欢迎来到Stack Overflow!这听起来像你可能需要学习如何使用调试器来遍历代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:** [如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

回答

1

一个问题是,你似乎有很多缺失牙套,大概是因为你决定把多个语句放在同一行,所以如

 if(mathquot>0 && (difx>0 && dify>0)) out="SE"; initialTY +=1; initialTX+=1; 

大概应该是:

 if(mathquot>0 && (difx>0 && dify>0)) { out="SE"; initialTY +=1; initialTX+=1; } 

等,为其他类似的路线。


也似乎是混乱 分配=)与测试相等( ==),这样线,如:

if(difx=0) 

应该是:

if(difx == 0) 


另一个问题:您正在混合整数和浮点运算不正确。例如。在这条线:

float mathquot=dify/difx; 

您正在执行中的整数除法,具有截断,然后将其转换为一个float结果。您最有可能需要:

float mathquot=(float)dify/difx; 

这将强制执行分割为浮点。


重要提示:如果您启用了警告,上述问题中的一部分可能会被编译器取回。如果您了解如何启用警告(例如 gcc -Wall ...),并且在编译时注意到任何此类警告,您将节省大量时间和精力。如果您的代码“干净地”编译(即没有警告),那么您应该在运行时调试的问题更少。

+1

非常感谢您的快速响应! –