使用kbhit()暂停终端输出?

时间:2010-09-29 23:04:09

标签: c++ console-application

我今天在大学学习了我的第一个“编程基础”实验课程。但有一件事让我感到奇怪:使用conio.h中的while(! _kbhit())(我确定它是一个C单元?)来“暂停”控制台输出。

这是最好的方法吗?使用它时需要注意什么?我的导师绝对是疯子吗?我只是问,因为它看起来像是一个肮脏的黑客,我以前从未在我看过的任何C ++代码片段中看过它。

标记问题作为家庭作业,因为它与学校有关,但实际上并不是家庭作业。如果这个问题比CW更好,请告诉我。

2 个答案:

答案 0 :(得分:2)

使用conio.h(或者更糟糕的是,使用pause调用system或类似的实用程序)通常是一个坏主意;它不是很便携。相反,可以使用cin

的功能
#include <iostream>
#include <limits>

/* Either of these would work, AFAIK */
void pause() {
    std::cin.ignore(std::numeric_limits<std::streamsize>::max());
    std::cin.get();
}

void pause() {
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    std::cin.get();
}

void pause() {
    std::cin.sync();
    std::cin.get();
}

答案 1 :(得分:2)

一种非常快速(且易于记忆)的方法是使用getchar

getchar();

根据stdin的缓冲模式,您可能必须在输入字符后按Return键。您可以使用setvbuf来解决这个问题,但我个人总是按回车。

您可能也在使用C ++ iostream。在这种情况下,你需要在某个地方调用它:

std::ios::sync_with_stdio(true);