繁体   English   中英

C ++忽略并清除缓冲区

[英]C++ ignore and clear buffer

    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的交互

欢迎来到员工登录屏幕

请输入用户名:Daniel Roberts

请输入密码:Daniel1234

登陆成功

总经理菜单

1)创建假期套餐

2)删除假期套餐

3)编辑假期套餐

4)创建员工帐户

5)删除员工帐户

6)编辑员工帐户

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

8)退出

您的选择:6

编辑员工信息


新员工用户名:John Smith

<-我需要按Enter摆脱的奇怪空间

输入新名称:

问题是cin.ignore()调用,它将读取直到读取100个字符或这些字符之一是换行符为止。 因此,要满足此要求,您必须输入例如换行符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM