2017-02-24 82 views
0

我的代码看起来像这样能在不长的CIN输入读取到一个字符串

string inputString; 
std::getline (std::cin, inputString) 
cout << inputString; 

当我CIN一长串〜30K字,则仅inputString有一个字符串的一部分。任何想法如何解决这一问题?

+1

您确定它不包含完整的输入吗?如果你输出'inputString.size()'你会得到什么? – NathanOliver

+1

大小可能受限于您的终端允许的最大线路长度? – Kupto

+0

您可以添加导致此问题的示例输入以及它生成的输出吗?这可能有助于确定问题。 –

回答

0

std::getline()文档上cppreference.com

getline从输入流中读取的字符,并将其置于一字符串:

1.表现为UnformattedInputFunction,不同之处在于input.gcount()不受影响。从input

  1. 呼叫str.erase()

  2. 提取字符,并将其追加到str,直到以下情况之一时(按所列顺序选中)

    :构造和检查岗哨对象之后,执行以下

    a。文件结束条件为input,在这种情况下,getline设置为eofbit

    b。下一个可用的输入字符是delim,如通过Traits::eq(c, delim),在这种情况下,分隔符字符从input提取,但不追加到str测试。

    c。 str.max_size()字符已经被存储,在这种情况下getlinefailbit并返回

  3. 如果提取无论出于何种原因(甚至没有被丢弃的分隔符),getlinefailbit,也不返回字符。

2.与getline(input, str, input.widen('\n'))相同,也就是说,默认分隔符是结尾字符。

因此,请检查您的输入是否受限于inputString.max_size()的值。它可能在您的系统上接近32k。

+0

或者16k如果Turbo C++解决:D –

+0

嗯,不,max_size()是一个巨大的大小4294967295 – alhas23