C ++ getline()不会结束输入

时间:2013-03-03 10:46:23

标签: c++ string input getline

string str, temp;

string c;

cout << "Insert the character that ends the input:" << endl;

getline(cin, c);

cout << "Insert the string:" << endl;

getline(cin, str, c.c_str()[0]);

我应该能够在字符串“test”中输入一个字符串,直到我对结束字符进行数字处理,但如果我输入一个双新行,则它不会识别结束字符,并且它不会结束输入。

这是输出:

Insert the character that ends the input:
}
Insert the string:
asdf

}
do it}
damn}

3 个答案:

答案 0 :(得分:1)

您可能需要稍微重新设计一下代码,例如如果分隔符是一个字符,那么为什么要阅读string(并使用一种晦涩的语法,如“c.c_str()[0]” - 至少只使用c[0]从字符串中提取第一个字符)?只需阅读单个分隔符字符。

此外,我发现getline()没有意外结果。

如果您尝试此代码:

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

int main()
{
    cout << "Insert the character that ends the input: " << endl;  
    char delim;
    cin >> delim;

    string str;   
    cout << "Insert the string: " << endl;   
    getline(cin, str, delim);

    cout << "String: " << str << endl;
}

输出符合预期,例如输入字符串“hello!world”在分隔符“!”处被截断,结果只是“hello”:

C:\TEMP\CppTests>cl /EHsc /W4 /nologo /MTd test.cpp
test.cpp

C:\TEMP\CppTests>test.exe
Insert the character that ends the input:
!
Insert the string:
hello!world
String:
hello

答案 1 :(得分:0)

将代码更改为

  

getline(cin,str,c [0]);

答案 2 :(得分:0)

结果还可以。 它不应该立即结束输入。它读到'\ n'然后它会存储你的输入,直到读取分隔符。

getline的分隔符:

  

分界字符。提取连续的操作   读取此字符时停止字符。这个参数是   可选,如果未指定,则该函数会考虑'\ n'(换行符   字符)是划界字符。

例如,如果您的分隔符为#,则输入abcd#hello,结果将为abcd