c++ - C ++如何暂停控制台输出,以便用户在继续之前可以阅读信息
问题描述
我一直在寻找一种暂停控制台显示的方法。我在互联网上找到了一些建议,但它并没有按照我想要的方式工作。
我的问题:如何改进这个 pause() 函数以识别任何键(包括回车键)?
我会先告诉你发生了什么,然后再向你展示代码片段。
- 我找到了一些有用的方法来暂停屏幕我写了一个小的 pause() 函数并在我的主线中调用它
- 该功能会显示一行“按任意键继续...”
- 我运行程序,线路被放到屏幕上,但没有暂停
- 考虑到输入缓冲区中有东西并且被拉出,我添加了一行来显示该行第一个字符的十六进制值。
- 显示的不是十六进制(无赖),但它确实表明我的输出显示行分裂了。所以我认为这是一个行尾字符(我删除了该行以十六进制显示,因为它没有按我想要的那样工作)我更新了函数,它现在显示十六进制字符,字符是 x' 0a'(换行)
- 因此,我在发出 cin.get() 暂停屏幕之前添加了一行来拉取该行尾字符
- 那行得通。控制台已暂停
- 我按了 ENTER 键并输入了内容,但程序没有恢复
- 然后我按了“x”字母键,程序恢复了
- 但是.. pause() 中的逻辑应该引发错误。它没。'x' 的测试不起作用。
- 我点击'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
在此先感谢您的帮助。
解决方案
经过多次尝试创建 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
推荐阅读
- .net-assembly - 如何编译大地址感知的 CIL 代码
- java - 如何根据jquery中的特定父级在多个复选框中仅选中一个复选框
- android - 如何在android上录制方形视频?
- javascript - ng2-select2 无法选择特定选项
- angular - 侦听文档和该文档的子集合中的更改
- javascript - 如何排除日期之间的周末以获得总天数,并且可以排除联邦假期吗?
- computational-geometry - 如何知道数据集采用的 XYZ 坐标系的约定?
- android - Android webview 中的语音合成
- r - 4d 曲面图逻辑回归(x、y、z、颜色)
- c# - 在协程中实例化 GameObject 时出现无限问题