首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“”自动生成换行符吗?

问“”自动生成换行符吗?
EN

Stack Overflow用户
提问于 2016-02-27 11:51:30
回答 3查看 5.8K关注 0票数 6

让我们考虑以下代码:

代码语言:javascript
复制
#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时,输出是:

代码语言:javascript
复制
First--Second:4
Third in a newline

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

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2016-02-27 13:48:05

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

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

例如:

代码语言:javascript
复制
$ echo 4 | ./a.out
First--Second:Third in a new line.

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

票数 6
EN

Stack Overflow用户

发布于 2016-02-27 13:47:51

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

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

stdin

代码语言:javascript
复制
1
2

stdout

代码语言:javascript
复制
First--Second:Third in a new line.

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

票数 3
EN

Stack Overflow用户

发布于 2019-10-02 19:02:13

如果有人有同样的问题,我就能这样解决:

代码语言:javascript
复制
string ans1;
getline(cin, ans1);
    ans1.erase(remove(ans1.begin(), ans1.end(), '\n'),
        ans1.end());
int ans1int = atoi(ans1.c_str());

基本上,它的工作方式是删除字符串中的所有换行符,然后将其取为整数或其他需要的字符。此外,您还需要算法库,因为它没有那么优雅,但是它可以工作!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35670506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档