アドバイスをいただけないでしょうか?
ifstream の file を使っているのに、cin の ignore や clear は無意味です。
file.eof() が false だからといって、getline や file >> が成功するとは限りません。
次のように getline や file >> の返した値をチェックしないといけないでしょう。
C++
1 while (getline(file, address) && (file >> country)) {
2 ...
3 }
あるいは、
C++
1 while (true) {
2 getline(file, address);
3 if (file.eof()) break;
4 file >> country;
5 if (file.eof()) break;
6 ...
7 }
getline を実行すると、'\n' まで読み込んで '\n' を捨てますが、
file >> country; を実行した後は、'\n' は入力に残ったままなので、
次の getline で、address は "" になるでしょう。
sample.txt の内容も質問に追加してください。
追記
修正された質問のコードに、
cout << "address [" << address << "], japan: " << japan << endl;
を追加して実行すると
text
1address [Tokyo 1丁目 111-222], japan: 1
2address [], japan: 1
無限ループにはなっていません。
コードを次のようにすると、
C++
1#include <fstream>
2#include <iostream>
3#include <string>
4using namespace std;
5
6int main()
7{
8 string address;
9 bool japan;
10 ifstream file;
11 file.open("sample.txt");
12
13 while (getline(file, address) && (file >> japan)) {
14 cout << "address [" << address << "], japan: " << japan << endl;
15 }
16}
address [Tokyo 1丁目 111-222], japan: 1
だけが読めました。
追記2
C++
1#include <fstream>
2#include <iostream>
3#include <string>
4using namespace std;
5
6int main()
7{
8 string address, tmp;
9 bool japan;
10 ifstream file;
11 file.open("sample.txt");
12
13 while (getline(file, address) && getline(file, tmp)) {
14 japan = tmp == "1";
15 cout << "address [" << address << "], japan: " << japan << endl;
16 }
17}