2017-03-14 13 views
-3

私はコードを最小限に抑え、同じエラーを再現してコンパイルします。私はそれが警告を出すことを知っている、あなたはそれらを言及する必要はありません。私はコーディングに新しいので、助けに感謝します。 問題は、ベクトルXposとYposがmain()のforループの完了ごとに同じ値を返すということです。私はrnadom出力を取得していますが、すべてのベクトル値が繰り返されます。彼らは違うはずです。何が間違っているのかを教えてもらえますか?どうもありがとうございます。コード:ランダムはforループで同じ値を返します

#include "stdafx.h" 
#include <ctime> 
#include <cmath> 
#include <random> 
#include <iostream> 

using namespace std; 


//error is here? 

int phaseTwoSimulate(double &Xpos, double &Ypos, int diameter, double stepSize) { 


    while (pow(Xpos - 201, 2) + pow(Ypos - 201, 2) < pow(diameter, 2)) { 
// while inside cicle 

     int direction = rand() % 4; 
     switch (direction) { 
     case 0://north 
      Ypos = Ypos - stepSize; 
      break; 
     case 1://east 
      Xpos = Xpos + stepSize; 
      break; 
     case 2://south 
      Ypos = Ypos + stepSize; 
      break; 
     case 3://west 
      Xpos = Xpos - stepSize; 
      break; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    double Xpos = 201; 
    double Ypos = 201; 
    srand(time(NULL)); 
    for (int x = 0; x < 50; x++) { 
     phaseTwoSimulate(Xpos,Ypos,50,1); 
     cout << Xpos << "," << Ypos << endl; 
     double Xpos = 201; 
     double Ypos = 201; 
    } 
    cin.ignore(); 
    cin.get(); 
    return 0; 
} 
+1

は、[投稿してくださいすることがMCVE]。 –

+0

それは私がやったことです!私はそれをする方法について何かを理解していませんか? –

+0

これは[mcve]ではありません。問題を再現するために最小限に抑えてください。そして、いいえ、要求されない限り、ここでプログラムのコード全体を投稿する必要はありません。 –

答えて

1

あなたの問題は、このコードの途中に2本の線である:これは2つの新しい変数XposYposを宣言し、201にそれらを設定してやっている何

cout << Xpos << "," << Ypos << endl; 
    double Xpos = 201; 
    double Ypos = 201; 
} 

。これらの変数は使用されません。ループが再び回ったときには、phaseTwoSimulateの次の呼び出しで古い変数(および古い値)がXposYposになります。これは、その点が既にサークルの外にあり、関数内のループが直ちに停止することを意味します。

は、この問題を解決するには、への簡単な変更を:

cout << Xpos << "," << Ypos << endl; 
    Xpos = 201; 
    Ypos = 201; 
} 

いっそ、近い彼らが使用されている場所に変数を移動して、あなたのコードを変更するには、

int main() 
{ 
    vector <int> vectorX; 
    vector <int> vectorY; 
    srand(time(NULL)); 
    for (int x = 0; x < 50; x++) { 
     double Xpos = 201; 
     double Ypos = 201; 
     phaseTwoSimulate(Xpos, Ypos, 50, 1); 
     cout << Xpos << "," << Ypos << endl; 
    } 
    cin.ignore(); 
    cin.get(); 
    return 0; 
} 
+0

もちろん、それは私が見たはずの何かばかげたものでした、私はそのようなノブです、ありがとう! –

関連する問題