【问题标题】:how to clear screen after taking input from user in C++?如何在 C++ 中获取用户输入后清除屏幕?
【发布时间】:2021-04-22 04:09:54
【问题描述】:

我尝试过使用:

  1. cout 我不明白它对终端做了什么。输出: On the terminal

  2. cout 此解决方案将光标移至下方 22 行,这是我不想要的。

  3. system('cls'); 我为它包含了 stdlib.h,但我仍然遇到同样的错误,我无法解决它。输出: On the terminal

这些是我能找到的解决方案,但它们无济于事。

这是我正在尝试的代码:

#include <iostream>
using namespace std;

void rev_array(int arr[], int start, int end)
{
    while(start < end)
    {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

void print_array(int arr[], int size)
{
    for(int i=0; i < size; i++)
    cout<<arr[i]<<" ";

    cout<<endl;
}

int main()
{
    int n;
    cout<<"Enter the size of array: ";
    cin>>n;
    int arr[n];
    for(int i=0; i<n; i++)
    cin>>arr[i];

    cout<<"033[2j\033[01;1H";
    
    print_array(arr, n);
    rev_array(arr, 0, n-1);

    cout<<"Reversed array is "<<endl;
    print_array(arr, n);
    return 0;
}

【问题讨论】:

  • 许多计算机甚至没有屏幕(例如 Web 服务器)。但是您可以考虑使用像QtFLTK 这样的图形工具包库。花几天时间阅读他们的文档,this C++ reference 和一些 C++ 标准,如 n3337
  • 你为什么不使用C++ containers ?顺便说一句,您可能对RefPerSys 项目感兴趣......然后通过电子邮件与我联系basile@starynkevitch.net

标签: c++ visual-studio-code vscode-code-runner


【解决方案1】:

这一行:

cout<<"033[2j\033[01;1H";

您缺少前导 \ 以指示字符串开头的八进制转义。当我更正它时,它只会将光标定位到 Linux 终端的顶部,而不是清除它。

我不是 ANSI 转义序列方面的专家,但通过互联网快速搜索发现这是使用 ANSI 转义序列清除屏幕的方法。

cout << "\033[2J\033[;H";

这在 Linux 上对我有用。它可能也适用于 MacOS 和其他 Unix 变体。但它不适用于开箱即用的 Windows。要在 Windows 10 上启用 ANSI 模式,请将以下代码适当地粘贴到您的程序中,然后从 main 调用 EnableAnsi

#include <windows.h>
void EnableAnsi()
{
    DWORD dwMode = 0;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleMode(hOut, &dwMode);
    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hOut, dwMode);
}

【讨论】:

    【解决方案2】:

    system() 函数调用作为参数给出的命令。

    在windows系统上清除屏幕,你可以调用(cls命令请用双引号括起来):

    system("cls");
    

    在基于 Unix 的系统上使用“clear”命令:

    system("clear");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 2013-08-11
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2013-06-24
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多