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

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

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

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

Q&A

解決済

1回答

459閲覧

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

prohi

総合スコア11

C++

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

0グッド

0クリップ

投稿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++

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使用

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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様 おっしゃる通りですね…… もう少し精査して書き込むべきでした。 失礼いたしました。
guest

回答1

0

自己解決

分かりましたっ

3つ入力して欲しいのに2つしか渡していなかったためでした。

本当に変なことを問い合わせて失礼しました。

投稿2022/08/30 08:21

prohi

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/08/30 09:13

何か文言が微妙ですね. 「2個ずつ入力」を3回やるつもりが,「3個ずつ入力」を2回やっていた,という話かと. (どちらも合計6個なので入力はされている)
prohi

2022/08/30 09:29

fana様 申し訳ございません。 自分の不注意で皆様のお時間を取らせる訳にはいかなかったため 早くコメントしたかったのです…… 変な日本語大変失礼しました。 3個ずつ入力を3回やるつもりが  2個ずつ入力となっていたため 想定外の動作をしてしまい混乱していただけでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問