簡體   English   中英

為什么代碼在經過一定次數的迭代后仍然無休止地運行?

[英]Why does a code keeps running endlessly after a certain number of iterations?

請考慮此C代碼

void main() {
    int i, s = 17;
    for (i = 8; i < 2000000; i++) {
        if (ifprime(i))
            s += i;
    }
    printf("%d", s);
}

它不會以這個迭代次數運行,但會產生一些迭代次數較少的結果,例如while (i < 200000)

這是為什么?

(請注意,我不是要求解決方案,非常感謝)

這將溢出32位整數。 這是未定義的行為,雖然這通常不會導致程序無休止地運行,但這是可能的,因為當程序顯示未定義的行為時,無法保證會發生什么。 嘗試使用long long ,這至少是64位(對於簽名版本,至少63位和一個符號位)。

long long s = 17;

並以這種方式打印:

printf("%lld", s);

對於所有高達2000000數字,素數搜索的這種未經優化的版本將需要相當長的時間,所以也許你只是認為它不是在無法運行。 我建議通過像if (i % 1000 == 0) printf("%d %lld\\n", i, s);這樣的打印進行調試if (i % 1000 == 0) printf("%d %lld\\n", i, s); 進入循環,然后你可以看到它有多遠,是否仍在工作。 對我而言,它正在發揮作用(當然,需要long long修復)。

因為你知道這是積極的,你可以使用

unsigned long long s = 17;

然后打印出來

printf("%llu",s);

你也可以用它來做我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM