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

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

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

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

Q&A

解決済

1回答

594閲覧

C++ 意図しない出力になる原因が分からないので教えて下さい

mjk

総合スコア303

C++

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

0グッド

0クリップ

投稿2020/08/11 09:46

概要

参考:問題AOJ <JOI - Prelim 0524>

※上記問題に取り掛かかり最初に入出力部分だけ作成しているところです。
※提示しているサンプルコードは質問用なので問題の条件とは関係ありません。
※参考問題を解くことが本題ではありません。

サンプルコードで1ループ毎に配列v3の内容だけ出力させているはずなのに意図しないデータが出力されます。
具体的には配列v3配列v1から加工したデータのみ入れているはずです。
しかし実行させると記述してないはずの配列v2の内容まで出力されてしまいます。
確認用の"-End-"も2回出れば良いはずなのですが4回出てるのでおかしいです。

知りたいこと

期待通りの出力にする方法やコードに間違いなどあればご指摘頂けると助かります。
ループの実装などで初歩的なミスがあるかもしれませんがアドバイス頂ければ助かります。

試したこと

whileループ無しにして1データセット限定にして出力させると期待通りに出たのでwhileループに問題があるかと思いwhile(true)にしてif(M==0)bareakさせたりもしてみましたが結果同じでした。

サンプルコード

C++

1#include <bits/stdc++.h> 2#define rep(i, m, n) for (int i = m; i < n; ++i) 3 4void proc() { 5 unsigned M; 6 while (std::cin >> M, M) { 7 8 int x, y; 9 std::vector<std::pair<int, int>> v1, v2, v3; 10 11 rep(i, 0, M) { 12 std::cin >> x >> y; 13 v1.push_back(std::make_pair(x, y)); 14 } 15 16 unsigned N; 17 rep(i, 0, N) { 18 std::cin >> x >> y; 19 v2.push_back(std::make_pair(x, y)); 20 } 21 22 rep(i, 0, v1.size() - 1) { 23 v3.push_back(std::make_pair(v1[i + 1].first - v1[i].first, 24 v1[i + 1].second - v1[i].second)); 25 } 26 27 // ※配列v3の内容をここでしか出力していないはず 28 for (auto p : v3) { 29 std::cout << "x:" << p.first << " y:" << p.second << std::endl; 30 } 31 std::cout << "-End-" << std::endl; 32 } 33} 34 35int main() { 36 std::cin.tie(0); 37 std::ios::sync_with_stdio(false); 38 39 proc(); 40 41 getchar(); 42 return 0; 43} 44

入力データ

txt

12 20 0 31 1 43 544 44 655 55 766 66 82 9777 777 10888 888 113 12987 987 13765 765 14543 543 150

出力結果(ターミナル画面の状態)

txt

12 20 0 31 1 4x:1 y:1 5-End- 63 744 44 855 55 966 66 10x:11 y:11 11x:11 y:11 12-End- 132 14777 777 15888 888 16x:111 y:111 17-End- 183 19987 987 20765 765 21543 543 22x:-222 y:-222 23x:-222 y:-222 24-End- 250

期待する出力(ターミナル画面の状態)

txt

12 20 0 31 1 4x:1 y:1 5-End- 63 744 44 855 55 966 66 102 11777 777 12888 888 13x:111 y:111 14-End- 153 16987 987 17765 765 18543 543 190

補足情報(開発環境など)

Win10
VSC1.47.3
C++14
gcc version 8.2.0 (Rev3, Built by MSYS2 project)

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

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

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

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

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

guest

回答1

0

ベストアンサー

C++

1unsigned N; 2rep(i, 0, N) {

Nが未初期化です。

投稿2020/08/11 10:01

SHOMI

総合スコア4079

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

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

mjk

2020/08/11 11:04

回答ありがとうございます。 すみません見落としていました。 思い込みでずっと躓いてて助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問