使用计数器循环数组

时间:2015-05-05 00:29:08

标签: c

我正在研究这个应该输出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");

3 个答案:

答案 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个素数,而不是输入数组。

可能是一个或两个愚蠢的跳跃,因为我还没有运行它。