让我们考虑以下代码:
#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
会自动打印换行符吗?
答案 0 :(得分:5)
您输入的数字和换行符由控制台软件打印。 cin
不会在我的理解中打印任何内容。
尝试通过重定向或管道提供一些输入,我猜你会看到没有新行打印。
例如:
$ echo 4 | ./a.out
First--Second:Third in a new line.
其中$
是提示,echo 4 | ./a.out(Enter)
是您的输入。
答案 1 :(得分:1)
您可以看到输入和输出是分开的。
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());
基本上,它的工作原理是删除字符串中的所有换行符,然后将其设置为整数或其他所需的值。另外,您将需要算法库 不是那么优雅,但是嘿,它有用!