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

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

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

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

Q&A

解決済

1回答

1100閲覧

C++のmapについて

waribashi

総合スコア30

C++

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

0グッド

0クリップ

投稿2018/06/17 09:48

前提・実現したいこと

C++の#include<map>を使う練習で
txtファイルにある郵便番号と住所のデータを読み込み
→mapに挿入
→住所を探したい郵便番号を入力
→入力された郵便番号に対応する住所を出力
という事をしているのですが、txtファイルの一番最後の住所のみ正常に出力されず、「この郵便番号に該当する住所はございませんでした。」という事が出力されます。
どうすれば一番最後の住所も出力されるようになるでしょうか?
txtファイルのラストに改行を入れれば一番最後の住所も正常に出力されるのですが、それ以外の解決策が無いものかと思いまして……。

該当のソースコード

C++

1#include <iostream> 2#include <string> 3#include <fstream> 4#include <map> 5using namespace std; 6 7void main() { 8 9 ifstream inFile; //入力ファイル 10 int number; //郵便番号 11 string address; //住所 12 int search; //探索用 13 map<int, string> addressMap; //郵便番号簿データ 14 map<int, string>::iterator p; //上記用の反復子 15 16 //入力ファイルを開く 17 inFile.open("address.txt"); 18 19 // 入力ファイルが開けなければ終了する 20 if (!inFile) { 21 cout << "入力ファイルを開けません" << endl; 22 return; 23 } 24 25 //ファイルから郵便番号と住所を読み込む 26 inFile >> number >> address; 27 28 //ファイルの末尾でなければ、以下の処理を繰り返す 29 while (!inFile.eof()) { 30 31 // 読み込んだデータをMapに挿入する 32 addressMap.insert(pair<int, string>(number, address)); 33 34 //ファイルから次の郵便番号と住所を読み込む 35 inFile >> number >> address; 36 } 37 38 cout << "郵便番号を入力してください。(0で終了)\n"; 39 cin >> search; 40 41 while (search != 0) { 42 //郵便番号をMap内から探す 43 p = addressMap.find(search); 44 45 //郵便番号があれば住所を出力、なければその旨を伝える 46 if (p == addressMap.end()) { 47 cout << "この郵便番号に該当する住所はございませんでした。\n"; 48 } 49 else { 50 cout << p->second<<endl; 51 } 52 53 //次の郵便番号 54 cout << "次の郵便番号を入力してください。(0で終了)\n"; 55 cin >> search; 56 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

C++

1inFile >> number >> address;

while (!inFile.eof()) {

addressMap.insert(pair<int, string>(number, address)); inFile >> number >> address;

}

このコードだとデータの追加が周回遅れになりますよね。
その場ですぐ追加するように変更してはいかがでしょうか。

C++

1while (!inFile.eof()) { 2 inFile >> number >> address; 3 addressMap.insert(pair<int, string>(number, address)); 4}

投稿2018/06/17 09:59

LouiS0616

総合スコア35660

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

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

waribashi

2018/06/17 10:02

ありがとうございます、解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問