Cin.get()是非阻塞的

cin.get() is non-blocking

本文关键字:是非 get Cin      更新时间:2023-10-16

我有与链接问题中提到的相同的问题。控制台窗口(在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 ordern"
        <<"Enter 2 to sort in descending ordern";
    cin>>order;
    cout<<"Data items in original ordern";
    for(counter=0;counter<arraysize;counter++){
        cout<<setw(4)<<a[counter];
    }
    switch (order){
        case 1: cout<<"nData items in ascending ordern";
                selectionSort(a, arraysize, ascending);
                break;
        case 2: cout<<"nData items in descending ordern";
                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++ -控制台窗口只是闪烁并消失。发生了什么事?

所以当在cin之后使用cin.get()时,您应该始终记住在它们之间添加cin.ignore()。

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

这主要是因为CIN会忽略缓冲区中的空白,所以在CIN>>顺序之后,缓冲区中有一个"换行符"(n),然后是CIN。读取n,然后程序成功执行并返回。cin.ignore()将忽略缓冲区中先前的输入。这真的很有帮助!

我是中国的一名学生。你的问题是我第一个可以回答的问题。我曾经有过和你一样的烦恼。我希望这对你有所帮助。请忽略我的蹩脚英语,谢谢。

我猜

default: return 0;

执行。编辑:

你说得对,这不是问题。读这。

快速修复是:

cout<<endl;
cin.ignore(); // <---- ignore previous input in the buffer
cin.get();

但是您可能需要阅读文章以获得有关该行为的进一步信息。

我打赌你击中了默认开关标签(return 0;)。这样就绕过了cin.get() -每个返回语句需要一个cin.get()

可能您的cin.get()正在读取终止您的订单输入的换行符?您可以尝试调用cin.get()两次。