2

在用 C++ 读取文本文件时,我有一个关于如何处理"\n"等的问题。"\r\n"当我执行以下操作序列时存在问题:

int k;
f>>k;
string line;
getline(f,line);

对于类似的输入文件

1
abc

我必须放 af.get()才能在 ."\n"之后读出结尾f>>k。如果有的话,我什至必须做f.get()两次"\r\n"

如果我>>与混合阅读这样的文件的优雅方式是什么getline

谢谢你。

编辑 另外,我想知道是否有任何方便的方法可以自动检测给定文件是否具有行尾字符"\n""\r\n".

4

2 回答 2

4

你需要稍微摆弄一下>>getline才能愉快地一起工作。通常,使用>>操作符从流中读取内容不会丢弃任何后续的空白(换行符)。

解决这个问题的常用方法是使用以下istream::ignore函数>>- 告诉它丢弃每个字符直到并包括下一个换行符。(仅当您确实想丢弃每个字符直到换行时才有用)。

例如

#include <iostream>
#include <string>
#include <limits>

int main()
{
    int n;
    std::string s;
    std::cout << "type a number: ";
    std::cin >> n;
    std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    std::cout << "type a string: ";
    std::getline( std::cin, s );
    std::cout << s << " " << n << std::endl;
}

编辑(我意识到您在问题中提到了文件,但希望不用说 std::cin 可以与 ifstream 完全互换)

于 2012-04-21T00:35:41.723 回答
0

tr一种完全不同的方法是使用(假设您使用 Linux)预处理数据文件以删除\r然后使用getline().

于 2012-04-21T04:32:43.390 回答