Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';在使用ostream运算符打印字符串时,t空格充当分隔符<&书信电报;?_C++_String_Iostream_Delimiter - Fatal编程技术网

C++ 为什么';在使用ostream运算符打印字符串时,t空格充当分隔符<&书信电报;?

C++ 为什么';在使用ostream运算符打印字符串时,t空格充当分隔符<&书信电报;?,c++,string,iostream,delimiter,C++,String,Iostream,Delimiter,我知道在编写像std::cin>>这样的代码时,其中some_var是一个字符串变量,只有输入的第一个单词将存储在some_var中。但是我不明白为什么std::cout是的cin在空格处停止,因为默认情况下,它认为您需要一个单词cout没有遵循相同的限制,因为,为什么会这样?想一想,如果打印出“你好,世界!”实际上只是打印出“你好”,这有什么意义吗?当然,这没有任何意义。开发人员知道他们想要输出什么(至少,我们希望是D)。是的cin在空格处停止,因为默认情况下,它认为您需要一个单词cout没有

我知道在编写像
std::cin>>这样的代码时
,其中some_var是一个字符串变量,只有输入的第一个单词将存储在
some_var
中。但是我不明白为什么
std::cout是的
cin
在空格处停止,因为默认情况下,它认为您需要一个单词
cout
没有遵循相同的限制,因为,为什么会这样?想一想,如果打印出“你好,世界!”实际上只是打印出“你好”,这有什么意义吗?当然,这没有任何意义。开发人员知道他们想要输出什么(至少,我们希望是D)。

是的
cin
在空格处停止,因为默认情况下,它认为您需要一个单词
cout
没有遵循相同的限制,因为,为什么会这样?想一想,如果打印出“你好,世界!”实际上只是打印出“你好”,这有什么意义吗?当然,这没有任何意义。开发人员知道他们想要输出什么(至少,我们希望是:D)。

当读取到
字符串时,
cin
以空格结尾被认为是有用的。但打印字符串时只打印第一个单词并没有什么用处


在所有你说的打印“某物在这里”到cout之后。在另一种情况下,你只是说从
cin
读一些东西。在一个字、一行和stdin的全部内容之间(直到收到EOF)的选择是任意的,设计恰好是读取一个字。这使得快速读取“john102.15”这样的记录行变得很容易(首先读入字符串,然后读入int,然后读入float)。使用
std::getline
将整行读入
字符串

当读入
字符串
时,
cin
被认为是有用的。但打印字符串时只打印第一个单词并没有什么用处


在所有你说的打印“某物在这里”到cout之后。在另一种情况下,你只是说从
cin
读一些东西。在一个字、一行和stdin的全部内容之间(直到收到EOF)的选择是任意的,设计恰好是读取一个字。这使得快速读取“john102.15”这样的记录行变得很容易(首先读入字符串,然后读入int,然后读入float)。使用
std::getline
将整行读取为
字符串

当使用
cin>>some\u var
读取输入时,默认情况下分隔符为空格(您可以更改),而当打印时,
cout
打印直到找到它的
\0
,这是字符串的结尾

如果要一直读到在输入流中找到
\0
,则必须编写以下代码:

std::getline(std::cin, some_var, '\0');
您可以指定任何其他字符作为分隔符,作为
std::getline
函数的第三个参数

请注意,有一个名为
getline
的成员函数,它与我上面使用的一个函数略有不同,后者是一个免费的独立函数

比较:

  • -免费独立功能。还可以使用重载函数
  • -std::istream的成员函数

我使用了第一个。

当使用
cin>>some\u var
读取输入时,默认情况下分隔符是空格(但您可以更改此值),而在打印时,
cout
将一直打印到它的find
\0
,这是字符串的结尾

如果要一直读到在输入流中找到
\0
,则必须编写以下代码:

std::getline(std::cin, some_var, '\0');
您可以指定任何其他字符作为分隔符,作为
std::getline
函数的第三个参数

请注意,有一个名为
getline
的成员函数,它与我上面使用的一个函数略有不同,后者是一个免费的独立函数

比较:

  • -免费独立功能。还可以使用重载函数
  • -std::istream的成员函数

我使用了第一个。

因为当您从
std::cin
获取输入时,它需要知道何时停止获取输入。如果它没有在第一个单词时停止,它会在什么时候停止?然而,当你输出一个变量时,答案很简单——你输出一个变量。

因为当你从
std::cin
获取输入时,它需要知道何时停止获取输入。如果它没有在第一个单词时停止,它会在什么时候停止?但是,当您输出一个变量时,答案很简单-您可以输出该变量。

对于
cin
cout
,分隔符是不同的。对于
cin
,在行尾的空白处拆分输入,对于
cout
。但是您可以更改这些默认分隔符。

对于
cin
cout
,分隔符是不同的。对于
cin
,在行尾的空白处拆分输入,对于
cout
。不过,您可以更改这些默认分隔符。

我认为他们采用了一种约定并坚持使用它。在
的情况下,他们必须决定停在哪里。新线?也许这是最自然的选择,但他们只是决定停止在某个空间阅读。

我认为他们采取了一种惯例并坚持下去。在
的情况下,他们必须决定停在哪里。新线?也许这是最自然的选择,但他们只是决定停止在某个空间阅读。

除了“这是他们被定义的行为方式”之外,很难回答这个问题。输出操作符将整个字符串复制到输出;输入读取一个单词。这相当于
printf()
scanf()
中的
%s
格式说明符的不对称行为。因为人们不希望一次只打印一个字。很难确定