【发布时间】:2015-09-25 01:01:59
【问题描述】:
虽然我的代码没有错误,但我很难理解我的逻辑中奇怪的输出和错误。 我的想法是将素数与输入分开并将它们存储在一个数组中,然后按降序排列它们。我无法确定输入中是否没有整数,或者输入是否小于特定数量的输入。这里我采用 4 个输入。
#include<stdio.h>
int main()
{
int i,j,p[3],n[3], count = 0;
printf("Enter 4 integers:");
scanf("%d,%d,%d,%d",&n[0],&n[1],&n[2],&n[3]);
if(scanf("%d,%d,%d,%d",&n[0],&n[1],&n[2],&n[3]) != 4);
printf("enter only 4 inputs\n");
if(scanf("%d,%d,%d,%d",&n[1],&n[2],&n[3],&n[4]) < 4);
printf("enter only integers\n");
for(j=0;j<4;j++)
{
for (i = 2; i <= n[j] / 2; i++)
{
if (n[j] % i == 0)
{
count++;
break;
}
if (count == 0)
p[j] = n[j];
else
p[j]=0;
}
}
for(j=0;j<4;j++) // to display prime array
{
printf("%d\n",p[j]);
}
if(p[0] == p[1] == p[2] == p[3] ==0 )
printf("No prime number is present\n");
for(i=1;i<4;++i) // Loop to store largest number to p[0]
{
if(p[0]<p[i])
p[0]=p[i];
}
printf("Largest element = %d",p[0]);
return 0;
}
【问题讨论】:
-
首先,不要访问超出范围的
p[3]、n[3]和n[4]。 -
每次您在
if()中调用scanf时,它都会等待用户输入另外4 个数字。 -
p[0] == p[1] == p[2] == p[3] ==0不会产生预期的结果。请改为将每个元素与0进行比较。即p[0] == 0 && p[1] == 0 && p[2] == 0 && p[3] == 0 -
你不能像
if(p[0] == p[1] == p[2] == p[3] ==0 )那样链接比较。应该是if (p[0] == 0 && p[1] == 0 && p[2] == 0)。 -
我觉得
if(scanf(~))后面的两个分号应该去掉。