2015-01-19 2 views
0

У меня есть этот код, который отлично работает, но я не могу понять значение cin.get (ch) в цикле for. Я протестировал программу после ее удаления, и первый вход прекрасен, но как только цикл запускается во второй раз, программа не дожидается, когда пользователь будет вводить «имя» и автоматически переходит к «отметкам».Ошибка входного буфера или что-то еще?

#include<iostream.h> 
#include<fstream.h> 
#include<conio.h> 
#include<stdlib.h> 
void main() 
{  clrscr(); 
int marks; 
char name[40]; 
char ch; 
ofstream a("STUDENT.txt",ios::app); 
char ans='y'; 
while(ans=='y'|| ans=='Y') 
{ cout<<"\nEnter name of student: " ; 
    cin.getline(name,40); 
    cout<<"Enter marks of student: "; 
    cin>>marks; 
    cout<<"Want to enter more? (y/n)"; 
    cin>>ans; 
    cin.get(ch); 
    a<<"\n"<<name<<"\n"<<marks; 
    } 
a.close(); 
getch(); 
} 

ответ

0

cin >> ans только считывает один символ со входа. Поэтому, когда пользователь вводит y Возврат, y будет помещен в ans, но буфер ввода по-прежнему будет содержать новую строку. Когда вы вернетесь к cin.getline(name, 40), это будет выглядеть как пустая строка. cin.get(ch) читает следующий символ, который является дополнительной новой строкой.

Лучший способ сделать это - использовать cin.getline(), чтобы прочитать ответ на вопрос «Хотите войти еще?». в строку, а затем проверьте, является ли первый символ строки y.

Смежные вопросы