为什么for循环显示输出的最后一部分?

时间:2015-12-19 08:55:59

标签: c for-loop

我正在学习上课。我已经完成了所有工作,但是我的环路并不能很好地工作,我应该怎么做才能解决它?

在第4个for循环内部,第一个循环(a)从9开始,第二个循环(b)从3开始。为什么?

代码:

#include <stdio.h>
#include <conio.h>


int main () {

    int i,j,a,b;

    for(a=0; a<=10; a++){
        for(b=0; b<=10; b++){
            for(i=0; i<=3; i++){
                for(j=0; j<=3; j++){
                    printf("a: %d -- b: %d -- i: %d -- j: %d \n",a,b,i,j);
                }//--j for--    
            }//--i for--    
        }// --b for--
    }// --a for--

    getch ();
    return 0;
}

输出:

enter image description here

2 个答案:

答案 0 :(得分:2)

你的程序很好,但它很快打印出1936行输出,所以你只能看到最后25行并向后滚动,你无法回到输出的开头,因为Windows终端似乎非常有限反向滚动功能,可能是150行。

您可以尝试在Windows设置页面中增加反向滚动功能(我多年没有使用Windows,我不知道该怎么做,也不知道是否可以这样做。)

还有其他方法可以说服自己代码没问题:

  • 将输出重定向到文件并加载该文件:打开终端窗口并在终端中键入myprogram > output.txt。由于getch()函数末尾的main,您同意需要按键盘。事实上,你可以完全删除这一行。正如manetsus所提到的,可以在第一个freopen("output.txt", "w", stdout);循环之前调用for来强制重定向。

  • 通过more管道输出。再次打开终端窗口并键入myprogram | less。拨打getch()也会适得其反。

  • getch()移动到第二个循环的末尾(就在}// --b for--之前)。该程序一次将产生16行并等待密钥。

答案 1 :(得分:1)

您正在控制台中看到输出,并且每个控制台都提供有限的缓冲区内存。

因此,先前的输出已生成,但它们会在您显示的安慰中被截断。

您可以通过添加以下行作为main()函数的第一行,在名为output.txt的文件中获取完整输出:

freopen("output.txt","w",stdout);

或者,从linux控制台,您可以编写以下命令,如@BLUEPIXY在评论中所述:

./a.out > out.txt