getline and printing with cout
getline and printing with cout
我试图一次读取一行文本文件,并将每一行打印到终端窗口。我在mac上使用g++进行编译,例如g++cpp3.cpp-o cpp3。
文本文件如下所示:
20100000001 20100000001.xml
20100000002 20100000002.xml
20100000003 20100000003.xml
20100000004 20100000004.xml
这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream ifs("file.txt");
string line;
while(getline(ifs,line)) {
getline(ifs,line);
cout << "[ " << line << " ]" << endl;
}
return 0;
}
我希望输出看起来像:
[20100000001 20100000001.xml]
[20100000002 20100000002.xml]
[20100000003 20100000003.xml]
[20100000004 20100000004.xml]
但是,所有内容都打印到终端中的一行。换句话说,文本文件中的每一行都写在最后一行的顶部。此外,括号"["answers"]"似乎只写一次,因此它基本上打印"[",然后是文件的全部内容,然后是"]"。
这就是终端的最终输出:
user$ ./cpp3
]10000000401 20100000004.xml
user$
有人能解释为什么会发生这种情况和/或如何解决问题吗?
查看数据文件-可能是od -c
。
写在每行顶部的所有内容听起来都像是在输出中打印r
(回车)而不是n
(换行),可能是因为数据中不包含换行符 也许该文件来自Windows环境,而getline()
正在剥离换行符,在末尾留下回车符,并且输出没有恢复换行符
或者,文件可能只包含r
行结尾——在这种情况下,getline()
会将整个文件读取为一行,并将其输出为一行。您可以通过向输出中添加一个计数器来证明这一点,并为每个输出行递增计数器。你对"方括号打印一次"的观察表明,这可能比糟糕的建议要好。输出中有一个endl
,这很重要。
您需要像这样删除getline(ifs, line);
:
while(getline(ifs,line)) {
cout << "[" << line << "]" << endl;
}
此外,您需要删除方括号之间的空格,否则输出将如下所示:
[ 20100000001 20100000001.xml ]
[ 20100000002 20100000002.xml ]
[ 20100000003 20100000003.xml ]
[ 20100000004 20100000004.xml ]
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::cout.imbue()多重调用
- Problems with std::cin.fail()
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 在 COUT 语句中使用 COUT 调用函数
- GCC 4.8.2 自动矢量化由于 cout 而失败
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- std::cout输出int时出现编译错误
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- C++ Setter/Getter,cout 工作,printf 失败
- cout with this_thread::sleep_for?
- Playing with setw, cout and for
- std::cout with Android NDK on Visual Studio 2015
- getline and printing with cout
- Problems with cout ( C++)