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
格式说明符的不对称行为。因为人们不希望一次只打印一个字。很难确定