cin.get() 是非阻塞的

2024-04-24

我有与链接问题中提到的相同的问题。控制台窗口(在 VS 2010 中)在运行程序后立即消失。我使用 cin.get();在主函数的末尾,但问题仍然存在。对可能的原因有什么想法吗?您可以查看main中的代码:

int main()
{
    const int arraysize = 10;
    int order;
    int counter;
    int a[arraysize] = {2,6,4,45,32,12,7,33,23,98};

    cout<<"Enter 1 to sort in ascending order\n"
        <<"Enter 2 to sort in descending order\n";
    cin>>order;
    cout<<"Data items in original order\n";

    for(counter=0;counter<arraysize;counter++){
        cout<<setw(4)<<a[counter];
    }

    switch (order){
        case 1: cout<<"\nData items in ascending order\n";
                selectionSort(a, arraysize, ascending);
                break;
        case 2: cout<<"\nData items in descending order\n";
                selectionSort(a, arraysize, descending);
                break;
        default: return 0;
    }

    for(counter=0;counter<arraysize;counter++){
        cout<<setw(4)<<a[counter];
    }

    cout<<endl;
    cin.get();

    return 0;
}

link : Windows 上的 C++ - 控制台窗口只是闪烁然后消失。这是怎么回事? https://stackoverflow.com/questions/4164077/c-on-windows-the-console-window-just-flashes-and-disappears-whats-going-on


因此,在 cin 之后使用 cin.get() 时,应始终记住在它们之间添加 cin.ignore() 。

cin>>order;
cin.ignore();
/* 
   other codes here
 */
cin.get();

主要是因为CIN会忽略缓冲区中的空白,所以在cin>>order之后,缓冲区中有一个“换行符”(\n),那么你的cin.get只是读取到了\n,那么你就编程成功了执行并返回。 cin.ignore() 将忽略缓冲区中先前的输入。这真的很有帮助!

我是一名在中国的学生。你的问题是我可以在这里回答的第一个问题。我曾经也遇到过和你一样的烦恼。我希望这可以帮助你。 忽略我糟糕的英语,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cin.get() 是非阻塞的 的相关文章

随机推荐