让我们说在我的(控制台)程序中,我要求用户输入他们的传记。 (或任何类型的文本导致几行)。
这将是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string bio;
cout << "Please Enter Your Bio\n";
cin >> bio;
}
问题:
我不知道字符串是否可以容纳那么多文本。
我知道cin会在用户输入单词之间的“空格”后停止输入,那么整个输入存储的选项是什么?我读过getline可以用,但我不知道怎么做。
如果用户想要开始另一个段落,那么当用户点击“输入”时,就会将其视为已完成写入并且代码将继续进行。 因此,用户无法编写实际的传记。
答案 0 :(得分:2)
如果没有编写或链接到文本编辑器,这将不是一个非常好的程序。例如,如果用户在已输入的行上出错,则无法返回并编辑它。
然而,只是为了接受这个想法,这种事情在某些情况下完成(例如unix程序mail
),并且通常期望现有输入将被管道化进入程序而不是与用户交互。
您不必担心字符串足够大。它可以容纳很多。您只需要决定是使用某个分隔符来结束输入,还是结束流。两者都有效。
选项1:仅在流末尾终止输入:
std::string bio, line;
while( std::getline( std::cin, line ) ) bio += line;
选项2:在流的末尾或分隔符上终止输入(在这种情况下,在一行上单个句点.
,但它可以是任何东西,包括空字符串以在第一行停止输入空行):
std::string bio, line;
while( std::getline( std::cin, line ) && line != "." ) bio += line;
答案 1 :(得分:-1)
将getline与输入流(cin)和字符串对象(bio)
一起使用geline(cin, bio);
您可以通过它的max_size()方法获得字符串对象的最大可能大小。
你可以指定&#34;结束&#34; getline函数的字符,例如,你可以使用&#34;文件的结尾&#34;字符&#39; \ 0&#39;
getline(cin, bio, '\0');
用户可以写多行文字,然后按CTRL + D结束输入