C++ 如何暂停控制台的输出,让用户在继续之前读取信息。

问题描述 投票:0回答:1

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

我的问题是 我怎样才能改进这个pause()函数,使它能识别任何键(包括回车键)?


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

  1. 我找到了一些有用的方法来暂停屏幕,我写了一个小的暂停()函数,并在我的主线中调用它。
  2. 功能放出一行 "按任意键继续......"
  3. 我运行了程序,这行字被放到了屏幕上,但并没有暂停
  4. 以为输入缓冲区里有什么东西被拉掉了,我加了一行来显示该行第1个字符的十六进制值。
  5. 显示的不是十六进制(bumers),但确实显示我的输出显示行分叉。 所以我认为这是一个行尾字符(我删除了那行以十六进制显示,因为它没有按照我的要求工作)我已经更新了函数,现在它显示十六进制字符,该字符是x'0a'(Line Feed)
  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++ console pause
1个回答
0
投票

经过多次尝试创建一个暂停()函数,我有了它。 它能像识别其他键一样识别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
© www.soinside.com 2019 - 2024. All rights reserved.