我正在研究这个应该输出10个素数的程序。所以我的问题是,我不知道如何在程序中存储10个素数后立即停止程序停止。我试着做sizeof(primes)/ siseof(int)== 10,但它没有用。 请帮帮我。提前致谢
int ar[100],primes[10],j,n,i,var;
printf("Enter a prime ,\n");
for(i=0;i<n;i++)
{
scanf("%d",&ar[i]);
if (IsPrime(ar[i])) {
primes[i] = ar[i];
if( sizeof(primes) / sizeof(int) == 10) break;
} else {
printf("%d is not a prime number\n", ar[i]);
}
}
printf("\narray :\n");
答案 0 :(得分:2)
使用计数器变量。使用此作为primes
数组的索引,因为如果用户输入的数字超过10个,您将在数组的边界外写入。
int ar[100],primes[10],j,n,i,var;
int primesFound = 0;
printf("Enter a prime number,\n");
for(i=0;i<n;i++)
{
scanf("%d",&ar[i]);
if (IsPrime(ar[i])) {
primes[primesFound] = ar[i];
primesFound++;
if( primesFound == 10) break;
} else {
printf("%d is not a prime number\n", ar[i]);
}
}
printf("\nThe elements of the array are:\n");
for(i=0;i<n;i++)
{
printf(" %d",ar[i]);
}
答案 1 :(得分:1)
只需添加一个计数器
int ar[100],primes[10],j,n,i,var;
printf("Enter a prime number,\n");
int counter = 0; // here you declare a counter
for(i=0;i<n;i++)
{
scanf("%d",&ar[i]);
if (IsPrime(ar[i])) {
counter++ // here you increase your counter
primes[i] = ar[i];
if (counter == 10) break;
} else {
printf("%d is not a prime number\n", ar[i]);
}
}
printf("\nThe elements of the array are:\n");
for(i=0;i<n;i++)
{
printf(" %d",ar[i]);
}
现在,为什么if( sizeof(primes) / sizeof(int) == 10) break;
不起作用?因为primes
是一个数组,它是静态声明的,所以它的大小始终是一个常量,等于10 * sizeof(int)
。
答案 2 :(得分:1)
我会按照你的既定意图做一些事情:
#define MAX_PRIMES 10
int main(int argc, char * argv[])
{
int inval;
int primes[MAX_PRIMES];
int count = 0;
printf("Enter a prime number,\n");
while (count < MAX_PRIMES)
{
scanf("%d", &inval);
if (IsPrime(inval))
{
primes[count] = inval;
count++;
}
else
{
printf("%d is not a prime number\n", inval);
}
}
printf("\nThe elements of the array are:\n");
for (int i = 0; i < MAX_PRIMES; i++)
{
printf(" %d", primes[i]);
}
}
int ar[100]
已替换为int inval
,因为似乎无需存储输入值。
for(i=0;i<n;i++)
已替换为while (count < MAX_PRIMES)
,因为之前的版本将在n处停止,是否已找到10个素数。
printf(" %d",ar[i])
被替换为printf(" %d", primes[i])
,因为所述的所需输出是10个素数,而不是输入数组。
可能是一个或两个愚蠢的跳跃,因为我还没有运行它。