前提・実現したいこと
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 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/17 10:02