gpt4 book ai didi

C++的cin.width函数解释

转载 作者:太空狗 更新时间:2023-10-29 20:23:09 25 4
gpt4 key购买 nike

我已经将书中的这段话(几乎没有解释)读了十几遍,但无法理解这是如何运作的。我正在尝试弄清楚这些函数是如何工作的。

int main() {
int widthValue = 4;
char sentence[ 10 ];

cout << "Enter a sentence:" << endl;
cin.width( 5 ); // input only 4 characters from sentence

// set field width, then display characters based on that width
while ( cin >> sentence )
{
cout.width( widthValue++ );
cout << sentence << endl;
cin.width(5); // input 5 more characters from sentence
} // end while
return 0;
} // end main

现在产生了以下输出,这就是我的麻烦了。第一行说 cin.width,这行意味着前 4 个字符,实际上,将被读取 - 即“This”,但是你输出的字段宽度为 4,所以当你执行 'cout << 语句时<< endl 语句你打印 4 个字符,即 - “This”。之后,你从句子中又读了 5 个字符。但是我在循环的下一次迭代中迷路了,因为宽度随后变为 5,但您输出“is”。我不明白这个概念。

最佳答案

当您在 cin 上设置 width(w) 然后从中读取 C 字符串时,运算符 >>> 会在其中一个时停止发生以下情况:

  • w-1 characters has been readed - >>> needs an character for null terminator, which is included in the count - >> 还需要一个字符作为空终止符,计入计数
  • 到达分隔符 - 在您的情况下,空格是分隔符
  • 到达输入末尾 - 当没有更多数据可读时,>>> 无能为力。

因此,您的循环按如下方式对输入进行分区:

  • 如果一个单词的长度小于四个字符,则将其完整阅读
  • 否则,单词将以四个字符为增量读取;最后一部分可能少于四个字符。

打印是右对齐的,每个单词或之前从 cin 中读取的部分单词前面都有空格。 widthValue++ 表达式控制整体宽度,因此每个下一个单词前面都有一个额外的空格。

这是 output对于 “jackdaws love my big sphinx of quartz”,添加了 | 标记以显示每行的开头和结尾:

|jack|
| daws|
| love|
| my|
| big|
| sphi|
| nx|
| of|
| quar|
| tz|

关于C++的cin.width函数解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34444126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com