C++ 如何暂停控制台输出,以便用户可以在继续之前阅读信息



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

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


我会先告诉你发生了什么,然后给你看代码片段。

  1. 找到了一些有用的方法来暂停屏幕,我写了一个小的 pause(( 函数并在我的主线中调用了它
  2. 该函数发出一行"按任意键继续..."
  3. 我运行了程序,该行被放到屏幕上,但没有暂停
  4. 认为输入缓冲区中有某些东西并且它被拉掉了,我添加了一行来显示该行第一个字符的十六进制值。
  5. 显示
  6. 的内容不是十六进制(无赖(,但它确实显示我的输出显示行分裂。 所以我认为它是一个行尾字符(我删除了该行以十六进制显示,因为它没有按照我想要的方式工作( 我已经更新了函数,它现在显示十六进制字符,字符为 x'0a'(换行(
  7. 所以我在发出 cin.get(( 暂停屏幕之前添加了一行来拉取该行尾字符
  8. 这奏效了。 主机已暂停
  9. 我按了 ENTER 键并输入了,但程序没有恢复
  10. 然后我点击了"x"字母键,程序恢复了
  11. 但是..pause((中的逻辑应该抛出一个错误。 它没有。"x"的测试不起作用。
      我按'x'
    1. 键后的值实际上是换行符(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

提前感谢您的帮助。

经过多次尝试创建 pause(( 函数,我有了它。 它识别 ENTER 键以及任何其他键。 该函数包含一个 cout 语句,用于以十六进制显示第 1 个字符(我在调试期间使用(。 如果您有任何意见,请告诉我。 我是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

相关内容

最新更新