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}
答案 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
。