C ++忽略并清除缓冲区

时间:2014-02-01 19:14:12

标签: c++ iostream

    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&gt;&gt;的整数输入。选择;进入开关。 我没有其他功能的任何错误,即使他们正在做同样的事情。字面上确切。

例如。以下

没有错误
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的交互

欢迎使用员工登录屏幕

请输入用户名:Daniel Roberts

请输入密码:Daniel1234

登录成功

总经理菜单

1)创建假日套餐

2)删除假期套餐

3)编辑假期套餐

4)创建一个员工帐户

5)删除员工帐户

6)编辑员工帐户

7)查看预订套餐的统计信息

8)退出

您的选择:6

编辑员工信息


新员工用户名:John Smith

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

输入新名称:

1 个答案:

答案 0 :(得分:1)

问题是cin.ignore()调用,它将读取,直到它读取100个字符或其中一个字符是换行符。所以为了满足它,你必须输入例如换行。