Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CLS对性能的影响_C++_Time Complexity - Fatal编程技术网

C++ CLS对性能的影响

C++ CLS对性能的影响,c++,time-complexity,C++,Time Complexity,此代码打印所需的第4个完美数字。这是我的一个旧代码,检查每个数字是否完美。它运行正常,在6秒钟内完成,但如果我在检查每个数字之前输入cls,它需要一个大的点击(大约100秒)。请告诉我背后的理论(为什么多个cls会影响性能) 没有正常的回答像“老兄,显然它很受欢迎,每次都会刷新屏幕。” 我知道更好的方法不是检查完美数,而是生成它们。(欧几里得-欧拉定理) IDE-DevC++ #include <iostream> #include <string> using name

此代码打印所需的第4个完美数字。这是我的一个旧代码,检查每个数字是否完美。它运行正常,在6秒钟内完成,但如果我在检查每个数字之前输入cls,它需要一个大的点击(大约100秒)。请告诉我背后的理论(为什么多个cls会影响性能)

没有正常的回答像“老兄,显然它很受欢迎,每次都会刷新屏幕。”

我知道更好的方法不是检查完美数,而是生成它们。(欧几里得-欧拉定理)

IDE-DevC++

#include <iostream>
#include <string>
using namespace std;

int choice, quan, i, a[50], number;
string schoice;

void startgame()
{
    choice = 3;
    quan = 4;
    system("cls");
    cout << "Hey guys, today we are gonna print different types of numbers\n";
    cout << "\nFollowing are some of the special numbers found in the known observable little universe of ours:- \n";
    cout << "\n1. Prime numbers\n2. Square numbers\n3. Perfect Numbers\n\n";
    cout << "Which ones do you wanna see?\n";
    //cin >> choice;
    cout << "\nCool! How many of them do you wanna see?\n";
    //cin >> quan;
}
void perfect()
{
    if (choice == 3)
    {
        int j = 0, y = 0, f = 0, number = 2;
        do
        {
            //This is the cls in question
            //system("cls");
            cout << "The number under inspection: " << number << "\n";
            f = 0;
            for (i = (number - 1); i >= 1; i--)
            {
                if (number % i == 0)
                {
                    f = f + i;
                }
            }

            if (f == number)
            {
                //cout<<number<<", ";
                a[j] = number;
                j = j + 1;
                y = y + 1;
            }
            number++;
        }
        while (y < quan);
        system("cls");
        cout << "\nHere are your " << quan << " perfect numbers starting from 1:-\n";
        j = 1;
        for (i = 0; i < quan; i++)
        {
            cout << a[i];
            if (j != quan)
            {
                cout << ", ";
            }
            j++;
        }
    }
}

int main()
{
    do
    {
        startgame();
        perfect();
        cout << "\n\nReturn to Main menu?(Y/N)\n";
        schoice = "N";
        //cin >> schoice;
    }
    while (schoice == "Y");
    return 0;
}
#包括
#包括
使用名称空间std;
int-choice,quan,i,a[50],数字;
弦乐学校;
void startgame()
{
选择=3;
全=4;
系统(“cls”);
cout当您运行系统(“cls”)时,您创建了一个新流程,并且每次选择一个新编号进行检查时都会创建一个新流程。
创建一个进程是一项昂贵的操作,更重要的是,如果您只想更新屏幕上的当前编号,则不需要它。
写就足够了

cout << "The number under inspection: " << number << "\r";
coutWindows CreateProcess()非常昂贵,比Unix fork()昂贵得多。此外,系统(“cls”)是一种效率低下的、不可移植的黑客。您不能在非Windows系统中使用它。您可以使用支持控制台操作的ncurses库

对于Windows,通过控制台API:

void clear() {
    COORD topLeft  = { 0, 0 };
    HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO screen;
    DWORD written;

    GetConsoleScreenBufferInfo(console, &screen);
    FillConsoleOutputCharacterA(
        console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
    );
    FillConsoleOutputAttribute(
        console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
        screen.dwSize.X * screen.dwSize.Y, topLeft, &written
    );
    SetConsoleCursorPosition(console, topLeft);
}

如果我在检查每个数字之前放一个cls的话
目的是什么?先生,实际上我只是想让输出更优雅一些,我想。对不起,这听起来一定很愚蠢,但我对这个有点陌生。谢谢你的关注。谢谢你,先生,我不确定我从中得到了多少,但我知道该研究什么。这对我来说是非常深刻和有趣的我,谢谢!!非常感谢您,先生,我在您的回答后进行了研究,试图了解/n/r等之间的区别,但不知道flush的具体功能。请详细说明。即使没有flush行,代码也运行良好。因此它带来了什么改进。再次感谢。flush()调用将输出从内部缓冲区强制到设备。这可能是必需的,也可能不是必需的,具体取决于您所处的操作系统环境。如果您的控制台输出是缓冲的,并且默认情况下没有使用\r字符进行闪烁,则可能是必需的。例如,大多数Linux系统都是这样。