用于了解输入和输出流缓冲区实际工作方式的程序

program for undertsanding how input and output stream buffers actually work

本文关键字:实际工作 方式 程序 缓冲区 输出流 了解 输入 用于      更新时间:2023-10-16

我是C++新手。所以,我正在尝试以下程序。而且我很难理解为什么当我在

#include<iostream>
#include<ios>
// for numeric_limits 
#include<limits>
using namespace std;
void main()
{
int num1;
float num2;
cin >> num1;
//cin.ignore(numeric_limits<streamsize>::max(), 'n');
cin >> num2;
cout << num1 << num2;
}

目前输出为

5.6     <-- input
50.6

在这里,它甚至没有接受 num2 输入。

但是在我取消注释 cin.ignore 行后,它显示了完美的输出

5.6     <--num1
9.8     <--num2
59.8

谁能解释一下它是如何从头开始工作的,以及操作系统如何参与缓冲区创建?

num1 是 int,所以从流中读入 num1 变量的第一件事是5,读取停止在第一个非数字字符处,即点.

然后 num2 被读取并且它是浮动的。.6读作0.6

输出5后跟0.6,中间没有任何字符。

当你取消注释 cin.ignore(( 时,同样的事情会发生,除了在你读取 num2 之前,下一个换行符(包括(之前的所有字符都被丢弃。

您将5读入 num1,丢弃.6n然后9.8读入 num2 变量,因为它是换行符之后的第一件事。

然后输出5后跟9.8,它们之间没有任何字符。