【发布时间】:2015-01-29 07:35:31
【问题描述】:
我正在做一项家庭作业,以计算用户选择的第 n 个素数。我让它工作得很好,而且相当快,但是如果用户输入大于 50000 的值,我决定添加一条错误消息。出于某种原因,它决定不起作用,所以我把它拿出来了。之后,一旦用户输入他们想要的素数,我的程序就会冻结。
#include <stdio.h>
int main(void)
{
long int pFactor,test,nthCount,target,result,notPrime;
test=2;
nthCount=0;
printf("Which prime number do you want to know?");
scanf("%li",&target);
while (nthCount<target)
{
for(pFactor=test/2;pFactor>1;pFactor--)
{
notPrime=0;
result=(test%pFactor);
if(result==0)
{
notPrime=1;
break;
}
if(notPrime!=1)
{
nthCount++;
notPrime=0;
test++;
}
}
}
test--;
printf("The %li prime number is %li.\n",target,test);
return 0;
}
我认为这与 scanf 相关,因为在那之后我尝试打印的任何内容都不会出现。
【问题讨论】:
-
我在您发布的代码中看不到任何包含。你没有吗?您是否尝试添加打印语句来指示程序在“冻结”时实际在做什么?您是否尝试过使用调试器(带有断点等)?
-
你考虑过无限循环的可能性吗?
-
只是 stdio.h。抱歉,我一定没有抄袭。
-
所以如果
result==0,那么你打破了内部循环,但nthCount和target没有改变,所以你的外部while循环将永远旋转...... -
另外,我有义务说:请避免使用
scanf。众所周知,它很难使用。首选使用fgets和sscanf的组合。 c-faq.com/stdio/scanfprobs.html