当前位置: 首页 > 知识库问答 >
问题:

为什么console要我在使用cin.ignore后输入某些内容?

宋新知
2023-03-14

我有一个数组,我需要从它的名字移除一个元素。当我输入一个想要删除的杂志名称时,控制台会调用一个输入行,我在里面放什么并不重要,我甚至可以按下一个即时回车键。

int removeMagazine(string name[], double price[], int length)
{
    if (length > 0)
    {
        length--;
        string removeName;
        int removeIndex;

        cout << "Enter a name of the magazine you want to remove." << endl;
        getline(cin, removeName);
        removeIndex = 0;
        for (int index = 0; index < length; index++)
        {
            if (removeName == name[index])
                removeIndex = index;
        }

        for (removeIndex; removeIndex < length; removeIndex++)
        {
            name[removeIndex] = name[removeIndex + 1];
            price[removeIndex] = price[removeIndex + 1];    
        }
        cin.clear();
        cin.ignore();
    }
    else
    {
        cout << "Could not remove from array. Array is empty!\n";
    }
    
    return length;
}

共有1个答案

淳于宏伯
2023-03-14

getline()之后不需要cin.ignore()

operator>>不同,getLine()还提取分隔符,不在流中留下任何东西。

CIN.Ignore()读取并忽略CIN中的1字符。因此,如果在getLine()之后调用,cin.ignore()将阻塞,直到输入另一个字符。

 类似资料:
  • 问题内容: 在GO教程中,我们有这张幻灯片:Goroutines 运行此代码会产生预期的结果(“ world”和“ hello”交替写入屏幕5次)。 但是,如果我们注释掉了(因此是导入行)并再次运行该程序, 则只剩下 “ hello”被写入屏幕五次了。 有什么重要的意义可以使goroutine免于死亡? 问题答案: 如果将其删除,则不会给goroutine运行的机会。goroutine调度程序不是

  • 我正在尝试进行MySQL插入,但收到如下错误消息: 下面是create表: 下面是MySQL的字符集和排序规则信息:

  • 但代码不起作用。我是否需要将launchActivity定义为一个规则,或者是否存在我需要在Gradle中导入的库? 这些是我已经有的进口品

  • 问题内容: 我有一个嵌套的flexbox布局(使用bootstrapv4),可根据横向/纵向模式更改方向。第一层(由flexbox使用该属性放置)包含5个用作按钮的图标。我无法在这些图标上正常使用该属性。 如果我不使用属性,则图标将按照自然顺序进行布局;但是,如果我尝试使用该属性对其进行布局,则无法正常工作。在代码中,()应该是最后一个元素。不是。我可以通过更改源中的顺序来获得所需的顺序。但是,我

  • 我需要一个数据结构用于我的用例。我应该能够将项目推入数据结构,并且我只想从堆栈中检索最后一个项目。JavaDoc for Stack表示:

  • 问题内容: 如果你碰巧有 在程序(或模块)的中间,您将得到警告: 我理解为什么通常不鼓励这样做(命名空间不可见),但是在很多情况下,这样做很方便,尤其是在不与任何人共享代码的情况下。 那么,谁能准确地详细解释为什么在所有可能的情况下都应禁止这样做? 问题答案: 我相信通过“在您的程序中间”,您正在谈论函数定义 内 的导入: 不允许这样做,因为这会使优化函数主体过于困难。Python实现希望在对函数