gpt4 book ai didi

c++ - 从 bash 管道输入文件并使用 getline(cin,line) 逐行读取它

转载 作者:行者123 更新时间:2023-11-28 05:18:54 24 4
gpt4 key购买 nike

我正在尝试使用 getline() 函数读取文件并使用 bash 命令通过管道传输我的输入文件,但得到不合逻辑的输出。

这是我的 main.cpp 代码:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;
int main(int argc, const char * argv[]) {

string line;

while(getline(cin,line)){
cout<<line<<endl;
}
return 0;
}

我的名为 input.txt 的输入文件如下所示

4 MF MF FM FF MF MM
MM FF
MF MF MF MF FF

我的bash命令及运行结果

DENGs-MacBook-Pro:APS stevedeng$ g++ -o main main.cpp -std=c++11
DENGs-MacBook-Pro:APS stevedeng$ ./main < input.txt
MF MF MF MF FFMF MM

我的想法是,程序将逐行读取 input.txt 并打印与输入文件完全相同的格式的输出。

谁能用仅有的一行有线输出来解释这里发生了什么?

如果我能做的唯一方法是从 bash 管道输入文件而不是使用 ifstream,我如何才能实现逐行读取的结果?任何帮助将不胜感激。

最佳答案

您的终端似乎没有接收到换行符或忽略了换行符,以至于每一个新行都会覆盖之前写入的行。

一件事可能是输入文件只包含回车符但现在包含换行符,并且出于某种原因 getline 无法更正此问题。如果这是问题所在,请参阅 SO 上的以下答案(如果有帮助,请不要忘记点赞)。

另一件事可能是换行没有写入cout。我建议 - 至少出于诊断目的 - 尝试 printf("%s\r\n",line.c_str())

关于c++ - 从 bash 管道输入文件并使用 getline(cin,line) 逐行读取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41945047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com