前提
命令 cin でなぜかループで抜けてしまうので
Googleにて”cin c++ ループ”との検索で調査してみたのですが
不明だったので質問をいたします。
発生している問題・エラーメッセージ
for (int i = 0; i < iRobotNum; i++) { cout << "robot id" << i << "no yatu" << endl; cin >> cRobot[i].iPosX >> cRobot[i].iPosY; }
にて上の行は実行されるのに下の行は実行されずループを抜けてしまう原因と対処方法を知りたい。
該当のソースコード
C++
1 2#include <iostream> 3#include <string> 4#include <vector> 5 6using namespace std; 7 8/* 9* 10* ボードの大きさ 11* 12*/ 13class cBord { 14public: 15 int setBordData(int x, int y) { 16 17 return 0; 18 } 19 20private: 21 22 23}; 24/* 25 ロボット 26*/ 27class cRobot { 28public: 29 int iPosX; 30 int iPosY; 31}; 32 33/* 34 工具箱 35*/ 36class cKouguBox { 37public: 38 int iPosX; 39 int iPosY; 40}; 41 42/* 43 アクションをクラスで持っているけどこれで良いのかな??? 44*/ 45class cAction { 46public: 47 int iRobotId; 48 char cHougaku; 49}; 50 51int main() 52{ 53 std::cout << "Hello World!\n"; 54 int iBordX, iBordY; 55 int iRobotNum; 56 int iActionNum; 57 cKouguBox cKougu[10]; 58 cRobot cRobot[1000]; 59 cAction cAction[1000]; 60 61 //1 行目では ロボットの初期位置の y, x 座標の上限についての整数 H, W, ロボットの数 N, ロボットの移動回数 K が半角スペース区切りで与 62 //えられます。 63 cout << "iBordX >> iBordY >> iRobotNum >> iActionNum" << endl; 64 cin >> iBordX >> iBordY >> iRobotNum >> iActionNum;//を読み込む 65 66 //・ 続く 10 行のうち i 行目では、 i 個目の工具箱が置かれたマスの x, y 座標 x_i, y_i が与えられます。(1 i 10) 67 cout << "10 kono kougubako no basyo" << endl; 68 for (int i = 0; i < 10; i++) { 69 int x, y; 70 cin >> cKougu[i].iPosX >> cKougu[i].iPosY; 71 } 72 73 cout << "robot syoki ichi:migi kai" << iRobotNum << endl; 74 for (int i = 0; i < iRobotNum; i++) { 75 cout << "robot id" << i << "no yatu" << endl; 76 cin >> cRobot[i].iPosX >> cRobot[i].iPosY; 77 } 78 79 cout << "robot acrion " << endl; 80 for (int i = 0; i < iActionNum; i++) { 81 int x, y; 82 cin >> cAction[i].iRobotId >> cAction[i].cHougaku; 83 } 84} 85
試したこと
上記をC++のHelloWorldが出力されるサンプルに貼り付けコンパイル>実行として
5 5 3 3 0 0 0 1 0 2 0 3 0 4 1 0 1 1 1 2 1 3 1 4 2 1 1 2 2 1 2 3 1
を読み込ませてみたところ
うまく3回動作しませんでした。
robot syoki ichi:migi kai3 robot id0no yatu 2 1 1 robot id1no yatu 2 2 1 robot id2no yatu robot acrion 2 3 1
と出力されたのです。
for (int i = 0; i < iRobotNum; i++) { cout << "robot id" << i << "no yatu" << endl; cin >> cRobot[i].iPosX >> cRobot[i].iPosY; }
のところでブレークポイントをつけて見てみると
cout << "robot id" << i << "no yatu" << endl; cin >> cRobot[i].iPosX >> cRobot[i].iPosY;
の一行目だけ実行され2行目が実行されなかったので
CINの動作をお伺いしてどうしてこのような動作をするのかな?と
疑問を解決したいと思っております。
(CINで入力が終わるまで待機していないのでしょうか?)
補足情報(FW/ツールのバージョンなど)
VisualStudio2019使用
以上になりますが情報に不足がございましたらご指摘下さい。
回答1件
あなたの回答
tips
プレビュー