C 忽略和清除缓冲区

C++ ignore and clear buffer

本文关键字:清除 缓冲区      更新时间:2023-10-16
    int position;
    afile.open("EmployeeInfo.dat", ios::in | ios::binary);   
    char name[80];
    cout << "nEdit Employee Info" << endl;
    cout << "---------------------" << endl;
    cout << "New Employee Username: ";
        cin.clear();
        cin.ignore(100, 'n');
        cin.getline(name, 80);
    bool flag = true;

嗨,所有这些都是我目前正在执行的程序的代码片段。大多数功能都很好,除了我需要按Enter两次以接收GETLINE数据。有人可以向我指出我在哪里做的错误吗?

最后一个输入是使用CIN>>选择的整数输入;进入开关。即使它们做完全相同的事情,我也没有其他功能的错误。从字面上看。

例如。没有错误的错误

afile.open("EmployeeInfo.dat", ios::in | ios::binary);   
char name[80];
cout << "nAdd Employee Info" << endl;
cout << "---------------------" << endl;
cout << "New Employee Username: ";
    cin.clear();
    cin.ignore(100, 'n');
cin.getline(name, 80);

好吧,这是周围的代码。

该函数在另一个函数中调用

    cout << "Your Choice: ";
    cin >> choice;
    switch(choice)
    {
        case 1: cout << "Create Holiday Package" << endl;
        break;
        case 2: cout << "Delete Holiday Package" << endl;
        break;
        case 3: cout << "Edit Holiday Package" << endl;
        break;
        case 4: addEmployee(afile, num, e);
        break;
        case 5: delEmployee(afile, num, e);
        break;
        case 6: editEmployee(afile, num, e);
        break; ....// to be continue case
  }//end case

这是我与CMD

的相互作用

欢迎来到员工登录屏幕

请输入用户名:丹尼尔·罗伯茨

请输入密码:Daniel1234

登录成功

总经理菜单

1)创建假日软件包

2)删除节日套餐

3)编辑假日软件包

4)创建一个员工帐户

5)删除员工帐户

6)编辑员工帐户

7)查看预订套件的数据

8)退出

您的选择:6

编辑员工信息


新员工用户名:约翰·史密斯

&lt; - 我需要按Enter的奇怪空间以摆脱

输入新名称:

问题是cin.ignore()调用,它将读取,直到它具有读取100个字符或其中一个字符为newline为止。因此,要满足它,您必须输入,例如newline。