让我们考虑以下代码:
#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 newlinecout不打印任何换行符。但是,在输入i的任何值(4)之后,就会打印换行符。这可能有两个可能的原因:
i数值后按下的Enter键将作为换行符打印。cin自动生成换行符。虽然第一个原因似乎更合理,但原因是,我认为第二个原因也可能是正确的,因为在Third打印之后,当我按Enter键时,没有打印任何新的行,即使程序因为while(1)而继续运行--这意味着控制台窗口在按Enter键时不会打印换行符。因此,似乎cin会自动打印换行符。
那么,为什么在我向cin输入之后生成换行符呢?cin会自动打印换行符吗?
发布于 2016-02-27 13:48:05
输入的数字和换行符是由控制台软件打印的。以我的理解,cin不会打印任何东西。
尝试通过重定向或管道提供一些输入,我想您将不会看到新的行打印。
例如:
$ echo 4 | ./a.out
First--Second:Third in a new line.其中$是提示符,echo 4 | ./a.out(Enter)是输入。
发布于 2016-02-27 13:47:51
你可以看到输入和输出是分开的。
stdin
1
2stdout
First--Second:Third in a new line.这意味着换行符是由Enter键生成的,是输入的一部分,而不是输出。
发布于 2019-10-02 19:02:13
如果有人有同样的问题,我就能这样解决:
string ans1;
getline(cin, ans1);
ans1.erase(remove(ans1.begin(), ans1.end(), '\n'),
ans1.end());
int ans1int = atoi(ans1.c_str());基本上,它的工作方式是删除字符串中的所有换行符,然后将其取为整数或其他需要的字符。此外,您还需要算法库,因为它没有那么优雅,但是它可以工作!
https://stackoverflow.com/questions/35670506
复制相似问题