清除输入缓冲区意味着什么?

时间:2016-07-21 19:37:32

标签: c++ c++11 visual-c++ buffer

我正在学习我的学校教科书中的代码,其中有一行是清除输入缓冲区的功能(在代码中作为注释提及)。

我无法理解它的目的。它绝对是必需的,因为它的移除会扰乱控制台输入过程。

请解释一下它的功能是什么,以及删除它后发生了什么。

我也尝试过使用cin.ignore();它也很好用。这里使用的函数如何,它是cin.ignore()的确切替换?

P.S。在学校我们使用旧版本的C ++。因此" .h" extension,clrscr();等等。

#include <iostream.h>
#include <fstream.h>
#include <conio.h>

void main(){
clrscr();

ofstream fout("student.txt", ios::out);
char name[30], ch;
float marks = 0.0;

for(int i = 0; i < 5; i++){
    cout << "Student " << (i+1) << ":\tName: ";
    cin.get(name,30);
    cout << "\t\tMarks: ";
    cin >> marks;
    cin.get(ch);  //for clearing input buffer (This thing!)
    fout << name << '\n' << marks << '\n';
}

fout.close();

ifstream fin("student.txt", ios::in);
fin.seekg(0);
cout << "\n";

for(int i = 0; i < 5; i++){
    fin.get(name,30);
    fin.get(ch); //Again
    fin >> marks;
    fin.get(ch); //Same
    cout << "Student Name: " << name;
    cout << "\tMarks: " << marks << "\n";
}

fin.close();
getch();

}

2 个答案:

答案 0 :(得分:0)

我只想首先指出你没有使用&#34;旧版本的C ++&#34;。你只是使用一些c代码(如clrscr())和c风格的编程,实际上可能不是cpp11或cpp14。此外,C ++的头文件通常只是.h。

现在回答你的问题:

cin.get(ch);  

&#39; \ n&#39;字符被读入ch。 &#39; \ n&#39;是一个字符,一个换行符。

确实和

做同样的事情
cin.ignore();

它用于清除输入缓冲区,这意味着从输入缓冲区中删除了行的空端(&#39; \ n&#39;)。

为什么这样做你问了吗? This就是为什么你会这样做的一个很好的例子。希望这能帮到你!

答案 1 :(得分:0)

cin >> marks;
cin.get(ch);  //for clearing input buffer (This thing!)

这是一种清除输入缓冲区的不太强大的方法。如果您键入一个数字后跟 Enter ,第一行将使用该数字并将值放在marks中,而第二行将读取换行符并将其丢弃。

它不健壮,因为它没有考虑用户在数字后输入的空格。更健壮的方法是使用istream::ignore

cin >> marks;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');