質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

CIN を ループ で使ったら抜け出す原因を知りたいためソースを貼り付けます。

prohi
prohi

総合スコア11

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0リアクション

0クリップ

264閲覧

投稿2022/08/30 05:56

編集2022/08/30 06:00

前提

命令 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++

#include <iostream> #include <string> #include <vector> using namespace std; /* * * ボードの大きさ * */ class cBord { public: int setBordData(int x, int y) { return 0; } private: }; /* ロボット */ class cRobot { public: int iPosX; int iPosY; }; /* 工具箱 */ class cKouguBox { public: int iPosX; int iPosY; }; /* アクションをクラスで持っているけどこれで良いのかな??? */ class cAction { public: int iRobotId; char cHougaku; }; int main() { std::cout << "Hello World!\n"; int iBordX, iBordY; int iRobotNum; int iActionNum; cKouguBox cKougu[10]; cRobot cRobot[1000]; cAction cAction[1000]; //1 行目では ロボットの初期位置の y, x 座標の上限についての整数 H, W, ロボットの数 N, ロボットの移動回数 K が半角スペース区切りで与 //えられます。 cout << "iBordX >> iBordY >> iRobotNum >> iActionNum" << endl; cin >> iBordX >> iBordY >> iRobotNum >> iActionNum;//を読み込む //・ 続く 10 行のうち i 行目では、 i 個目の工具箱が置かれたマスの x, y 座標 x_i, y_i が与えられます。(1 i 10) cout << "10 kono kougubako no basyo" << endl; for (int i = 0; i < 10; i++) { int x, y; cin >> cKougu[i].iPosX >> cKougu[i].iPosY; } cout << "robot syoki ichi:migi kai" << iRobotNum << endl; for (int i = 0; i < iRobotNum; i++) { cout << "robot id" << i << "no yatu" << endl; cin >> cRobot[i].iPosX >> cRobot[i].iPosY; } cout << "robot acrion " << endl; for (int i = 0; i < iActionNum; i++) { int x, y; cin >> cAction[i].iRobotId >> cAction[i].cHougaku; } }

試したこと

上記を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使用

以上になりますが情報に不足がございましたらご指摘下さい。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

fana

2022/08/30 06:31

話がイマイチわかりません. cin >> cRobot[i].iPosX >> cRobot[i].iPosY; っていう,何かわからんけど 2個 の値を入力する箇所で,あなたはあえて > 2 1 1 って 3個 突っ込んでみた,と.そしたら良くわからん挙動になったんだけど,どう動いてんのコレ? …というような話をしているのですか?
fana

2022/08/30 06:34

結果として何がどう入力されたのか? を知りたいのであれば 全ての入力が終わった後に(main関数の末尾とかで),各データの中身を表示なりしてみたらどうですか?
prohi

2022/08/30 06:52

fana様 おっしゃる通りですね…… もう少し精査して書き込むべきでした。 失礼いたしました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。