我不知道为什么我没有从代码中获得任何输出。为什么我对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;
}
答案 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);