首页 > 解决方案 > C ++如何暂停控制台输出,以便用户在继续之前可以阅读信息

问题描述

我一直在寻找一种暂停控制台显示的方法。我在互联网上找到了一些建议,但它并没有按照我想要的方式工作。

我的问题:如何改进这个 pause() 函数以识别任何键(包括回车键)?


我会先告诉你发生了什么,然后再向你展示代码片段。

  1. 我找到了一些有用的方法来暂停屏幕我写了一个小的 pause() 函数并在我的主线中调用它
  2. 该功能会显示一行“按任意键继续...”
  3. 我运行程序,线路被放到屏幕上,但没有暂停
  4. 考虑到输入缓冲区中有东西并且被拉出,我添加了一行来显示该行第一个字符的十六进制值。
  5. 显示的不是十六进制(无赖),但它确实表明我的输出显示行分裂了。所以我认为这是一个行尾字符(我删除了该行以十六进制显示,因为它没有按我想要的那样工作)我更新了函数,它现在显示十六进制字符,字符是 x' 0a'(换行)
  6. 因此,我在发出 cin.get() 暂停屏幕之前添加了一行来拉取该行尾字符
  7. 那行得通。控制台已暂停
  8. 我按了 ENTER 键并输入了内容,但程序没有恢复
  9. 然后我按了“x”字母键,程序恢复了
  10. 但是.. pause() 中的逻辑应该引发错误。它没。'x' 的测试不起作用。
    1. 我点击'x'键后的值实际上是换行符(x'0a')

这是代码:

    #ifndef MYFUNCTIONS
    #define MYFUNCTIONS

    #include <cstdio>
    #include <cstdlib>

    using std::cout;
    using std::cin;

    void pause() {
    string holdit;
    //std::cout.flush();
    //std::cin.clear();
    std::cout << std::endl << "Press any key to continue...";
    std::cin >> holdit;
    holdit = std::cin.get();
    std::cout << "The first character in holdit is <" << holdit[0] << "> x'" << setfill('0') << setw(2) << std::hex << (int)holdit[0] << "'" << endl;
    if (holdit[0] == 'x') throw 99;
}

    #endif

在此先感谢您的帮助。

标签: c++consolepause

解决方案


经过多次尝试创建 pause() 函数后,我有了它。它识别 ENTER 键以及任何其他键。该函数包括一个 cout 语句,以十六进制显示第一个字符(我在调试期间使用)。如果您有任何意见,请告诉我。我是 C++ 的初学者。所以请善待:) 谢谢。

#ifndef MYFUNCTIONS
#define MYFUNCTIONS

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;

void pause()
{
    char holdit;

    cout << "Press any key to continue..." << endl;
    holdit = _getch();
    cout << "holdit = < x'" << setfill('0') << setw(2) << hex << (int)holdit << "'>" << dec << endl;
    if (holdit == 'x') throw 99;

}

#endif

推荐阅读