2017-04-11 53 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

非常感謝您的快速響應! –