C++ C++;忽略并清除缓冲区 int位置; 打开文件(“EmployeeInfo.dat”,ios::in | ios::binary); 字符名[80]; 不能选择; 开关(选择) { 案例1:cout

C++ C++;忽略并清除缓冲区 int位置; 打开文件(“EmployeeInfo.dat”,ios::in | ios::binary); 字符名[80]; 不能选择; 开关(选择) { 案例1:cout,c++,iostream,C++,Iostream,问题在于cin.ignore()call,它将一直读取,直到它读取了100个字符或其中一个字符是换行符。因此,为了满足它,您必须输入一个换行符。hmm我理解您的意思,但是当我键入cin.getline时,这不就是满足\n函数的吗?例如,我的输入是cin.getline(name,80)@user3245403当您执行ignore后接getline时,您正在执行两个输入操作。这两个操作都以换行结束。哦,好吧,我明白了,但是,当我删除ignore函数时,出现了新员工用户名:记录未找到。cin.get

问题在于
cin.ignore()
call,它将一直读取,直到它读取了100个字符或其中一个字符是换行符。因此,为了满足它,您必须输入一个换行符。

hmm我理解您的意思,但是当我键入cin.getline时,这不就是满足\n函数的吗?例如,我的输入是cin.getline(name,80)@user3245403当您执行
ignore
后接
getline
时,您正在执行两个输入操作。这两个操作都以换行结束。哦,好吧,我明白了,但是,当我删除ignore函数时,出现了新员工用户名:记录未找到。cin.getline被跳过。我该怎么做?我想你需要显示一点more周围的代码,以及显示实际的输入/输出和预期的输入/输出(即,使用当前代码显示会话,以及它应该是什么样子)。请将您的程序复制粘贴到一个代码块中,好吗?这有助于我们查看另一个代码块之前/之后发生的情况。
    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;
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