没有获得printf的预期输出

时间:2014-04-06 21:18:31

标签: c gcc

我不知道为什么我没有从代码中获得任何输出。为什么我对printf()的调用没有显示任何输出?

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int k=0,l=0,x=0,y=0,j=5,i=7;

    printf("I am above 1st if");
    if ( i > j )
    {

        x=i;
        i=j;
        j=x;
    }

    for ( k = i, x = 0 ;; k%=2,x++) 
    {

        for ( y = 0 , l = j ; l > 0 ; y++ )
        {
            if ( l == k )
            {
                break;
            }
            l%=2;
        }
    }

    printf("%d\n", x+y);
    return 0;
}

2 个答案:

答案 0 :(得分:7)

您的代码存在很多问题,而您的问题并不是很明确。但是,最突出的问题是:

for ( k = i, x = 0 ;; k%=2,x++) 

这个循环没有终止条件,并且它内部的代码都没有导致循环退出(注意break只会突破它所在的循环,所以内循环break停止内循环,但对外循环没有影响)。因此,它永远运行。这就是为什么你的最终printf永远不会到达(printf本身就可以正常工作),你的程序永远不会退出。

无论你的程序应该做什么,你都必须更加努力地思考它,并确保你的代码正确地反映了你想要执行的算法。有时,在将这些事情翻译成代码之前,先将这些事情写在纸上是有帮助的。

在调试器中单步执行此类操作可以为您提供有关程序流的大量信息。

顺便说一句,如果您从未看到第一个printf,那么它是默认的stdout是行缓冲的,这意味着有时需要换行或显式刷新缓冲输出实际显示。并不是第一个声明没有达到,缓冲区永远不会被刷新,所以它永远不会被显示。

答案 1 :(得分:2)

第一个printf似乎不起作用的原因是因为stdout的默认行为是缓冲字符,直到打印换行符。如果向第一个printf添加换行符,则输出将显示在控制台上。

printf("I am above 1st if\n");

如果您不想使用换行符,则可以使用fflush功能强制显示输出。

printf("I am above 1st if");
fflush(stdout);