在c ++中使用冒号分隔符读取文件

时间:2014-12-10 21:20:22

标签: c++ fstream

我需要从文件中读取并逐行打印

这是带冒号分隔符的文件

Miami:Sunny:USA
London:Rainy:England

并打印如下:

City: Miami Weather:Sunny Country: USA
City: London Weather:Rainy Country: England

然而我得到了这个:

City:  Miami Weather:  Sun Country USA
London City:  Rain Weather:  England Country USA

这是我到目前为止所做的:

#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
using namespace std;

void read_from_file()
{
    string city;
    string c;
    string w;
    fstream file("list.txt");
    if (file.is_open())
    {
        while (file.good())
        {
            getline(file, city, ':');
            cout << " City:  " << name;
            getline(file, w, ':');
            cout << " Weather:  " << w;
            getline(file, c, ':');
            cout << " Country: " << c;
        }
        file.close();
    }
}

int main()
{
    read_from_file();
    return 0;
}

我认为我的问题冒号getline(file, w, ':');但是当我放'\n'时它会崩溃。

有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

您所在国家/地区之后没有任何冒号,因此您也不应将其用作分隔符。

更改

getline(file, c, ':');

getline(file, c);

因此它将使用默认换行符作为分隔符。

此外,您的代码只会在一行输出所有内容,因此您可能需要更改

cout<<" Country: "<<c;

cout<<" Country: "<<c << '\n';

也可以考虑阅读Why is iostream::eof inside a loop condition considered wrong?,检查EOFfile.good()通常不是检查输入的方法。在你的情况下,它没有任何问题。