【问题标题】:C++ ignore and clear bufferC++ 忽略并清除缓冲区
【发布时间】:2014-02-25 11:06:38
【问题描述】:
    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

输入新名称:

【问题讨论】:

  • 我认为您需要显示更多的周边代码,以及显示实际的输入/输出和预期的输入/输出(即显示与当前代码一样的会话,以及它应该看起来像)。
  • 你能把你的程序复制粘贴到一个代码块中吗?它可以帮助我们了解在另一个之前/之后发生了什么。

标签: c++ iostream


【解决方案1】:

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

【讨论】:

  • 嗯我明白你的意思,但是当我输入 cin.getline 时,这不是已经满足 \n 功能了吗?例如,我的输入是 cin.getline(name,80)
  • @user3245403 当您执行ignore 后跟getline 时,您正在执行两个 输入操作。两者都以换行符结尾。
  • 哦,好的,我明白了,但是,当我删除忽略功能时,会发生这种情况 新员工用户名:找不到记录。 cin.getline 被跳过。我该怎么办?
猜你喜欢
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多