我一直在寻找一种暂停控制台显示的方法。 我在互联网上找到了一些建议,但它没有按照我想要的方式工作。
我的问题:如何改进此 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 语句,用于以十六进制显示第 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