输入缓冲区错误或其他原因

Input Buffer error or something else?

本文关键字:其他 缓冲区 错误 输入      更新时间:2023-10-16

我有这段代码,它工作正常,但我无法理解 for 循环中 cin.get(ch) 的含义。删除程序后,我对其进行了测试,第一个输入很好,但是一旦循环第二次运行,程序就不会等待用户输入"名称"并自动跳过"标记"。

#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();
}

cin >> ans只从输入中读取一个字符。所以当用户键入 y Return 时,y 将被放入 ans 中,但输入缓冲区仍将包含换行符。当你回到cin.getline(name, 40)时,这将看起来像一个空行。 cin.get(ch)读取下一个字符,即额外的换行符。

更好的方法是使用cin.getline()将"想要输入更多?"的答案读入字符串中,然后检查字符串的第一个字符是否y

相关文章: