“cin”是否自动生成换行符
Does `cin` produce a newline automatically?
让我们考虑以下代码:
#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());
基本上,它的工作原理是删除字符串中的所有换行符,然后将其转换为整数或您需要的任何其他字符。此外,您还需要算法库它不是那么优雅,但嘿,它有效!
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 提取后返回换行符的C++istream.get()
- 如何在出现换行符之前将多个整数作为输入?
- 正则表达式 获取两个换行符之间的文本
- 包含换行符分隔的单词的文件和C++中这些单词的字符串向量的大小是否相同?
- 在字符串中输入换行符
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- 如果在循环中给cin一个意外的输入,则会自动输入C++换行符作为输入
- “cin”是否自动生成换行符
- VIM Doxygen支持-换行符上自动插入星号(*)