cin.get()是非阻塞的

时间:2011-11-16 12:18:12

标签: c++ visual-studio-2010 visual-c++ console-application

我遇到与链接问题中提到的问题相同的问题。控制台窗口(在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:C++ on Windows - the console window just flashes and disappears. What's going on?

4 个答案:

答案 0 :(得分:3)

所以当在cin之后使用cin.get()时,你应该总是记得在它们之间添加cin.ignore()。

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

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

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

答案 1 :(得分:2)

我猜是

default: return 0;

被执行。

编辑:

你是对的,这不是问题。阅读this

快速解决方法是:

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

但您可能希望阅读该文章以获取有关该行为的更多信息。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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