2015-05-05 2 views
0

Я работаю над этой программой, которая должна выводить 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"); 
+1

Прибавьте счетчик и проверьте, достигло ли оно 10. – Barmar

+0

Как это сделать? – HenryDev

+0

Я пробовал делать, если (sizeof (primes)/sizeof (int) == 10) break; но он не работает – HenryDev

ответ

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 простых чисел, а не входной массив.

Возможно, это был глупый тюф или два, потому что я его не запускал.

+0

Спасибо большое! a он работает! – HenryDev

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]); 

    } 
+0

Это работает и позволяет мне хранить 10 номеров праймеров :), но затем после того, как он получит 10 простых чисел, программа сжимает :( – HenryDev

+1

Вам нужно использовать 'primes [primesFound]', а не 'primes [i]', потому что ' i' может получить больше, чем '9'. – Barmar

+0

Обратите внимание, что ваша программа печатает все введенные пользователем цифры, а не только простые, потому что вы печатаете' ar', а не 'primes'. – Barmar

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).

+0

Это работает и позволяет мне хранить 10 номеров праймеров :), но затем после получения 10 простых чисел программа сокрушает :( – HenryDev

+0

Программа вылетает из-за того, что вы не можете использовать простые числа [i], когда я становлюсь больше затем 9 ... Прочитайте мои и комментарии Бармара в своем вопросе! –

+0

счетчик для «простых чисел» должен отличаться от такового для «ar» – Dien

Смежные вопросы