我有一个接受两个数字并将其显示在屏幕上的程序。
但是,当我输入第一个数字后按“ enter”时,程序将显示答案,然后再让我输入第二个数字。
为什么会这样?
int main()
{
int n1;
float n2;
cin>>n1;
cin>>n2;
cout<<"int n:"<<n1<<endl<<"float n:"<<n2;
return 0;
}
当两个变量都为int时有效。
cin>>n1; cin>>n2;
和cin >> n1 >>n2
之间没有区别。 Enter键仅用作同步输入缓冲区和流缓冲区的信号。 cin不每行输入一次,它在有可用数据量时解析缓冲区。如果解析不完整,则等待。如果无法完成解析,它将停止并更改状态位。要继续解析,您将忽略或清除部分或全部缓冲区内容。
在第一行中输入了错误的内容,导致cin
进入bad()
状态。如果您通过远程终端运行程序,可能会出现边缘情况,例如,某些错误的字符可能会误入Windows换行生成的^ M会中断Linux上的cin
流。如果您从保存在不同平台上的文件中输入内容,也是如此。在Windows上,行尾由#10和#13两个字符组成。在linux上,steam只希望#13作为新行和缓冲区刷新信号,#10是意外字符。
如果您在一行中输入两个数字并且都有效,则说明有换行问题