如何在按Enter键后防止命令行关闭

时间:2019-09-20 19:38:01

标签: c++ c windows visual-studio command-line

所以我想编写一个程序,打印出由“ O”制成的金字塔,金字塔的高度由用户输入确定。

#include <stdio.h>

int main()
{

    int n, i, j, k;
    scanf_s("%d", &n);
    {
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= n - i; j++)
            {
                printf(" ");
            }
            for (k = 1; k <= 2 * i - 1; k = k + 1);
            {
                printf("O");
            }
            printf("\n");
        }
        return 0;
    }
}

我是一个完整的初学者,因此,如果您有任何建议,请务必提供。无论如何,我尝试在Android的编译器上运行它;看起来很有效,将金字塔打印出来。

在Microsoft Visual Studio上进行了尝试。命令行打开,但是在我输入数字并按“ enter”后,整个窗口只是关闭而没有给我任何东西。我该如何预防?不需要用户输入的程序似乎可以正常运行。

5 个答案:

答案 0 :(得分:3)

对于您描述的问题:Preventing console window from closing on Visual Studio C/C++ Console application

对于您的代码,似乎有一个错误,当前您的代码不会产生金字塔,而是产生斜杠O。解决此问题的方法:

for (k = 1; k <= 2 * i - 1; k = k + 1);从此行中删除;为什么这可以解决问题?

如果循环后有;,则表示循环不执行任何操作,然后接下来的三行是:

{
    printf("O");
}

这意味着只有一个O打印出来,而不是循环打印。

答案 1 :(得分:1)

除了for (k = 1...循环后的分号外,此代码中没有错误;如果Visual Studio关闭,则问题出在该程序上。 (很可能因为程序已完成执行而将其关闭,但我不知道该程序。)

由于您写道自己是一个完整的初学者,并且希望您提供一些建议,因此我将提供一些风格上的注释。但这只是关于如果我是我时我将如何做事的评论,我并不是说您拥有的是错误的。

  • 单字母变量名称:这些会咬你。混合i,j和k确实很容易,因为它们都是毫无意义的索引。当程序变得更加复杂时,您将很高兴拥有有意义的变量名。另外,如果您要查找变量的实例,则搜索“ i”要比搜索“空格”或“ spc”困难得多。
  • scanf_s()下的代码块:没有理由将此代码包含在块中-所做的只是将内部代码右移一个制表符。屏幕空间非常宝贵。
  • 您可能会发现从0进行迭代比从1进行迭代更有用,因为您将大量使用迭代器变量作为数组索引。养成以for (dex = 0 ; dex < max_val ; dex++)的形式编写循环的习惯会对您有好处。请注意,比较是“ dex
  • “ k = k + 1”对我来说似乎很糟糕-阅读代码的人们将需要停下来并试图弄清为什么人们不仅期望“ k ++”,而且还期望在另外两个中使用什么循环。 (甚至对于超过一个的增量,我都希望像“ k + = 2”而不是“ k = k + 2”)

答案 2 :(得分:0)

一旦控制台应用程序从main方法返回,关联的控制台窗口就会自动关闭。对于Windows操作系统,在您的Store语句之前添加system("pause");。对于独立于平台的解决方案,您只需向用户显示提示并等待按键,然后再从main返回即可。输入缓冲区中剩余的任何字符(在这种情况下,从scanf输入)都必须清除。

return 0;

答案 3 :(得分:0)

您应该在程序中包含conio.h头文件,然后只需将getch();在程序的最后一个cout语句之后。

我认为这将有助于关闭窗口 它对我有用;)

答案 4 :(得分:0)

在 return 0; 之前的最后放置一个 cin 命令(C++) 或等效的 C,这样它就不会关闭。 :> 例如:

.
.
.
.
int control; cin>>control;
return 0;
}