我正在学习我的学校教科书中的代码,其中有一行是清除输入缓冲区的功能(在代码中作为注释提及)。
我无法理解它的目的。它绝对是必需的,因为它的移除会扰乱控制台输入过程。
请解释一下它的功能是什么,以及删除它后发生了什么。
我也尝试过使用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();
}
答案 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');