#include<stdio.h>
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
main();
return 0;
}
輸出結果是一個無限循環。請解釋。解釋c程序的輸出
#include<stdio.h>
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
main();
return 0;
}
輸出結果是一個無限循環。請解釋。解釋c程序的輸出
您正在調用主功能從您的主功能。在您調用新的主要功能後,它會打印一些字符串,然後再次調用主要的函數。
您的i變量根本不會遞增,因爲它在for循環的第一次迭代中不會遞增。在您致電主要之後,它將永遠不會返回到之前的主循環,以便發生for循環的下一次迭代。所以循環將是無限的,並且i將等於。即使您將for循環更改爲任何其他循環,循環仍然是無限的。
我包括你的維修代碼,只是爲了好玩:
#include<stdio.h>
int main()
{
static int i=0;
if(i>=5) return 0;
i++;
printf("\nSoftware %i", i);
main();
return 0;
}
首先要注意的是'i'沒有遞增,所以+ 1。但是,這不是一個無限循環。這是一個無限遞歸(當然會在某個時候崩潰):-) –
但是爲什麼它不會增加? –
@AyeshaGupta因爲要遞增,main()必須返回到循環。這不會發生,所以也不會發生增量。這是因爲for循環只有在第一次迭代完成後才執行'i ++'。在這種情況下它永遠不會完成。 –
代碼調用主要功能,一次又一次
for(;i<5;i++)
main();
bt該變量在本質上是靜態的。 –
靜態,但對於每次調用它都會再次創建。 – user2605046
它不會爲每個調用重新創建,它只是不增加,請參閱我的代碼示例:)它增加並保持其值。 – nio
它的一種遞歸調用。你的主要功能是調用自己導致無限循環。
我< 5調用的main()
我< 5調用的main()
我< 5調用的main()
...
如果妳想要調用一些功能的5倍。
void myFunc()
{
printf("\nSoftware");
}
main()
{
static int i=1;
for(;i<5;i++)
myFunc();
return 0;
}
林用C++所以它可能是一些小錯誤。
這不是一個無限循環。
您正在遞歸調用main
,但從來沒有結束它。這會導致堆棧溢出。
i++
永遠不會被評估,因爲您永遠不會達到for
循環的範圍的結束。
這似乎沒有任何困難或不同。在這個程序中for循環並不重要,所以每當main()被調用時它都是相同的,它肯定是一個無限循環。使用條件語句可以限制無限循環。此外,這個靜態int並不重要。所以顯然主要被稱爲無限次,直到超時發生。 這實際上是自我解釋的
調用循環中的main函數會耗盡所有內存並導致堆棧溢出。
是的,輸出結果是無限的,因爲在for(;i<5;i++)
i
的增量只出現在for循環的最後一行。所以,這裏i
的值永遠不會增加。 例如:
for(i=0;i<5;i++)
{
int a,b; // just an example
a=10;
b=20;
printf("%d",i);
printf("%d %d",a,b);
// increment of i takes place here at the last line of for loop
}
同在這裏也:
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
{
main();
// increment of i takes place here.But compiler never comes at this line .That's why i never incremented .
}
return 0;
}
當遞歸調用一個函數,你必須具備一定的終止條件,以及每個呼叫必須做出朝向終止條件取得了一些進展,否則你只會永遠循環(或者直到你用完堆棧空間並崩潰)。這裏main()調用發生在i ++之前,所以沒有進展。 –
@AyeshaGupta ...再次閱讀'for'循環...這是非常簡單的問題... – someone
@Ayesha:看到我的回答 –