C ++ getline和附加

尼莫

我正在尝试编写一个非常简单的程序,逐行读取其标准输入(直到“ end”出现在一行的开头)。同时,它尝试构造一个包含所有行串联的新字符串。

这种行为令人费解。正确读取了这些cout << current << endl(如该所示)。但是,构造的字符串不是我期望的。相反,它仅包含最后读取的内容。但是,如果我替换construct.append(current)construct.append("foo"),它就可以很好地工作。

我在这里做错了什么?

#include <iostream>                                                               
#include <string>                                                                 
#include <cassert>                                                               

using namespace std;                                                              

int main() {                                                                      
    string construct;                                                             
    while(true) {                                                                 
        string current;                                                           
        getline(cin, current);                                                    
        assert(!cin.eof());                                                       
        if (current.find("end") == 0) { break; }                              
        cout << current << endl;                                        
        construct.append(current);                                          
    }                                                                             
    cout << construct << endl;                                          
    return 0;                                                                     
}                                                                                 

编译:

g++ -o main main.cpp -Wall -std=c++0x  

输入: input.txt

abcdef
ghij
end

输出: ./main < input.txt

abcdef
ghij
ghijef

如果我键入输入而不是使用文件,则它将按预期工作。同样,我在gcc(linux)和clang(mac os)上也得到了相同的结果。

尼莫

我发现了问题。我的输入文件是带有CRLF行终止符的ascii文件(并且我使用的是Mac)。construct变量被正确创建,但它不是由终端正确显示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ getline和附加

来自分类Dev

C ++ getline和cin阅读

来自分类Dev

涉及getline()和循环的C ++问题

来自分类Dev

C-getline()和strcmp()问题

来自分类Dev

C ++中的Getline和cin.ignore

来自分类Dev

如何附加C和C ++模块?

来自分类Dev

在C ++中使用getline读取数字和名称?

来自分类Dev

代码块和C对getline的未定义引用

来自分类Dev

在C中的char []之前和之后附加'

来自分类Dev

C ++ Segfault附加,push_back和运算符=或+ =

来自分类Dev

关于w3c验证和附加代码

来自分类Dev

在C ++中使用getline和>>运算符检查输入文件

来自分类Dev

使用 getline 和 string 函数的 C++ 程序中的分段错误

来自分类Dev

在C ++中使用getline()

来自分类Dev

在C ++中使用getline()

来自分类Dev

getline c ++需要帮助

来自分类Dev

C ++ fstream getline参数

来自分类Dev

C++ 使用 Getline

来自分类Dev

c ++ getline并忽略

来自分类Dev

android ndk和eclipse提供有关c ++ getline()函数的不同错误信息

来自分类Dev

C ++与istream,getline,二进制文件,正则表达式和字符串的异常行为

来自分类Dev

getline()函数中的行长-c

来自分类Dev

C,错误:getline的类型冲突

来自分类Dev

C ++中的getline输入错误

来自分类Dev

getline(cin)行为异常(C ++)

来自分类Dev

内存分配和getline

来自分类Dev

在C / C ++中附加位

来自分类Dev

在C / C ++中附加位

来自分类Dev

C#附加以打开Outlook电子邮件,编辑和发送