2016-07-21 4 views
0

Я проходил код в своем учебнике по школе, в котором есть строка, которая выполняет функцию очистки входного буфера (упоминается как комментарий в коде).Что означает очистка входного буфера?

Я не мог полностью понять его цель. Это определенно требуется, поскольку его удаление приводит к запуску процесса ввода в консоль.

Пожалуйста, объясните, что это за функция, и что происходит, когда я удаляю ее.

Я также пробовал использовать cin.ignore(); и он отлично работает. Какая функция используется здесь, является ли она точной заменой cin.ignore()?

P.S. В школе мы используем более старую версию C++. Таким образом, расширение «.h», 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

Я просто хочу, чтобы начать с указанием на то, что вы не используете „старую версию C++“. Вы просто используете какой-то c-код (например, clrscr()) и программирование в стиле c, и, возможно, не cpp11 или cpp14. Также заголовочные файлы для C++ часто остаются только .h.

Теперь ответ на Ваш вопрос:

cin.get(ch); 

Применение '\ п' символ получает прочитать в гл. '\ n' - один символ, символ новой строки.

действительно делают то же самое, как

cin.ignore(); 

Он используется для очистки буфера ввода, что означает, что пустой конец строки («\ п») находится в процессе удаления из входного буфера.

Почему это сделано, вы спросите? This - хороший пример того, почему вы это сделаете. Надеюсь, это помогло вам!

+1

Нет, он использует «более старую» версию C++. Скорее всего, он использует turbo C++, который запускает стандартную/нестандартную версию C++. – NathanOliver

+0

@NathanOliver Мой плохой, извините. Спасибо что подметил это. Вы должны признать, что «более старая версия C++» звучит довольно странно. Я думал, что он имел в виду «не cpp11 или cpp14». –

+0

Я начинаю заниматься программированием. Да, я использую Turbo C++, я думал, что это была более старая версия, мне плохо. В любом случае, cin.get (ch) не должен брать пользовательский ввод от пользователя и передавать его в «ch»? –

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

Это не так надежный способ очистки входного буфера. Если вы вводите число, за которым следует Введите, первая строка будет потреблять номер и поместить значение в marks, а вторая строка будет читать символ новой строки и отбросить его.

Он не является надежным, так как он не учитывает пробелы, которые пользователь мог ввести после номера. Более надежным методом было бы использовать istream::ignore.

cin >> marks; 
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
Смежные вопросы