`cin`会自动生成换行符吗?

时间:2016-02-27 11:51:31

标签: c++

让我们考虑以下代码:

#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不会打印任何换行符。但在输入i的任何值(4)后,将打印换行符。可能有两个可能的原因:

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

检查出来:http://ideone.com/tBj1uS

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

stdin

1
2

stdout

First--Second:Third in a new line.

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

答案 2 :(得分:1)

如果某人有同样的问题,我可以这样解决:

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

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