“cin”是否自动生成换行符

Does `cin` produce a newline automatically?

本文关键字:自动生成 换行符 是否 cin      更新时间:2023-10-16

让我们考虑以下代码:

#include<iostream>
int main()
{
    std::cout<<"First-";
    std::cout <<"-Second:";
    int i;
    std::cin>>i;
    std::cout<<"Third in a new line.";
    while(1){}

}

当值 4 给 i 时,输出为:

First--Second:4
Third in a newline

cout不打印任何换行符。但是在我输入任何值(4)后i打印了一个换行符。这可能有两个可能的原因:

  • 键入i数值后按的 Enter 键打印为换行符。
  • cin自动生成换行符。

虽然第一个原因似乎更合理,但我认为第二个原因也可能是正确的,是因为当我按下Enter打印Third后,没有打印新行,甚至程序继续运行while(1) - 这意味着控制台窗口在按下Enter键时不会打印换行符。所以似乎cin会自动打印换行符。

那么,为什么在我向cin输入后会生成换行符?cin会自动打印换行符吗?

您输入的数字和换行符由控制台软件打印。 在我的理解中,cin不会打印任何东西。

尝试通过重定向或管道提供一些输入,我想您不会看到打印新行。
例如:

$ echo 4 | ./a.out
First--Second:Third in a new line.

其中$是提示,echo 4 | ./a.out(Enter)是你的输入。

看看这个: http://ideone.com/tBj1uS

您可以在那里看到输入和输出是分开的。

stdin

1
2

stdout

First--Second:Third in a new line.

这意味着,换行符由 Enter 键生成,是输入的一部分,而不是输出的一部分。

如果有人会遇到同样的问题,我能够像这样解决它:

string ans1;
getline(cin, ans1);
    ans1.erase(remove(ans1.begin(), ans1.end(), 'n'),
        ans1.end());
int ans1int = atoi(ans1.c_str());

基本上,它的工作原理是删除字符串中的所有换行符,然后将其转换为整数或您需要的任何其他字符。此外,您还需要算法库它不是那么优雅,但嘿,它有效!