C ++:使用cin.getline()

时间:2012-08-06 15:32:12

标签: c++ arrays string cin

现在我已经了解到cin.getline就像这样。

cin.getline(dest string, number of charecters to put into string);

所以假设这个程序。

char s1[8]="Hellopo";
cin.getline(s1,5);
cout<<s1<<endl;

这是输入:hhhhhhhhhhhhh

这是节目输出:hhhh

我对此计划有两个顾虑。

1-)我将程序设置为从用户输入的内容中获取5个字符并存储在s1中。当我运行该程序时,它只打印出4个字符。

2-)此外,我希望程序在打印出用户的内容之后继续打印剩余的s1。但它在hhhh

之后停止了

请向我解释我的两个问题。谢谢

4 个答案:

答案 0 :(得分:7)

在这种情况下,

std::cin::getline将存储四个字符加上一个空终止(总共五个字符)。 std::cout将在它找到的第一个空终止符处停止打印。

答案 1 :(得分:3)

来自istream::getline()

  

已提取count-1个字符(在这种情况下执行setstate(failbit))。

这意味着如果您指定5,则只会读取4个字符。和

  

...然后它将空字符CharT()存储到数组的下一个连续位置

所以在第四个字符后面会插入一个空字符。因此数组s将包含内容:

'h' == s[0]
'h' == s[1]
'h' == s[2]
'h' == s[3]
0   == s[4]

operator<<将在找到第一个空字符时停止打印char*

答案 2 :(得分:2)

第五个字符是0终结符。 getline(buffer,n)存储最多n字节,包括缓冲区中的0终止符。然后cout << s1;在0终结符处停止。

答案 3 :(得分:1)

第五个字符是空终止符,它标记字符串的结尾。