Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么一段代码在经过一定次数的迭代后会无休止地运行? 请考虑这个C代码 void main() { int i, s = 17; for (i = 8; i < 2000000; i++) { if (ifprime(i)) s += i; } printf("%d", s); } void main(){ int i,s=17; 对于(i=8;i_C_Sum_Integer_Primes - Fatal编程技术网

为什么一段代码在经过一定次数的迭代后会无休止地运行? 请考虑这个C代码 void main() { int i, s = 17; for (i = 8; i < 2000000; i++) { if (ifprime(i)) s += i; } printf("%d", s); } void main(){ int i,s=17; 对于(i=8;i

为什么一段代码在经过一定次数的迭代后会无休止地运行? 请考虑这个C代码 void main() { int i, s = 17; for (i = 8; i < 2000000; i++) { if (ifprime(i)) s += i; } printf("%d", s); } void main(){ int i,s=17; 对于(i=8;i,c,sum,integer,primes,C,Sum,Integer,Primes,它不会以这样的迭代次数运行,但会以较低的迭代次数生成一些结果,如while(i

它不会以这样的迭代次数运行,但会以较低的迭代次数生成一些结果,如
while(i<200000)

为什么呢


(请注意,我不是在寻求解决方案,非常感谢)

这将使用32位整数溢出。这是未定义的行为,虽然这通常不会导致程序无休止地运行,但这是一种可能性,因为无法保证当程序显示未定义的行为时会发生什么。改为尝试
long
,它至少是64位(对于有符号版本,至少是63位和一个符号位)

并按以下方式打印:

printf("%lld", s);

对于
2000000
以内的所有数字,这个素数搜索的未优化版本将花费相当长的时间,因此,也许你只是认为它在无休止地运行,而实际上并非如此。我建议通过如下方式进行调试:(I%1000==0)printf(“%d%lld\n”,I,s)进入循环,然后您可以看到它有多远,以及它是否仍在工作。对我来说,它是有效的(当然是使用了
long
fix)。

因为你知道你可以使用它

unsigned long long s = 17;
然后用

printf("%llu",s);

你也可以用它来表示i

是不是仅仅因为素数之间有更大的间隔?(如果你在搜索素数,你不需要检查偶数)你说“不会运行”是什么意思?程序崩溃了吗?您是否尝试过在调试器中捕获崩溃?通过无休止地运行,您的意思是它输出的数字超出上限,还是说它只需要很长时间?因为这么大的数字需要很长时间。@有些人是的,我认识这个人,但我一般都会问,因为我遇到过很多这样的问题times@Someprogrammerdude很抱歉,是的,它可以运行,但是无休止的是的,没有输出从来没有考虑过调试,因为我一直认为它是一个硬件限制,现在我明白了!多谢各位man@chqrlie有时我忘记了至少对整数大小有一些保证。:)感谢您的提示,它现在已修复。好的,它实际上至少是63个值位加上一个符号位:)
printf("%llu",s);