Учитывая массив из 8 целых чисел пользователем, программа должна распечатать каждое введенное простое число. Программа после ввода какого-то числа останавливается, не знаю почему. Не могли бы вы сказать, что я сделал неправильно, пожалуйста? код:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
const int N=8;
int i, j, count, x;
int arr[N];
int prime[N];
j = 2;
for(i = 0; i < N; i++)
{
printf("Enter a number %d:", i + 1);
scanf("%d", &arr[i]);
if (arr[i] == 1)
{
prime[i] = arr[i];
count++;
}
else
{
do
{
x=arr[i] % j;
if (x != 0)
j++;
else
break;
}
while(true);
if (arr[i] == j)
{
prime[i] = arr[i];
count++;
}
}
}
for (i = 0; i < count; i++)
printf("%dth prime number:%d\n", i + 1, prime[i]);
getch();
return 0;
}
Если пользователь вводит целое число меньше предыдущего, ваша программа зацикливается. Вероятно, вы хотели инициализировать j в предложении else непосредственно перед циклом do-while.
Также обратите внимание, что вы должны проверить возвращаемое значение из scanf, чтобы убедиться, что целое число действительно было введено.
@NomeAcaso Самый простой способ устранить неполадки в вашей программе — вставить операторы печати, которые печатают переменные в разных местах кода.
Я использую логическую функцию, чтобы проверить, является ли элемент в массиве простым или нет, затем я заполняю массив простых чисел следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool Prime(int);
int main()
{
int N;
do
{
printf("Give me the number of numbers :");
scanf("%d",&N);
}while(N<1);//in your array must be minimum 1 element
int prime[N];
int arr[N];
int j=0;
for(int i=0;i<N;i++)
{
do
{
printf("Enter a number %d:",i+1);
scanf("%d", &arr[i]);
}while(arr[i]<0); //you can write while(arr[i]>1) and you just write if (Prime(arr[i])==true)
if (arr[i]!=1&&arr[i]!=0&&Prime(arr[i])==true)
{
prime[j]=arr[i];
j++;
}
}
printf("\n\n");
for(int p=0;p<j;p++)
{
printf("%d th prime number:%d\n",p+1,prime[p]);
}
return 0;
}
bool Prime(int n)
{
for(int i=2;i<=(n/2);i++)
{
if (n%i==0)
{
return false;
}
}
return true;
}
спасибо за это решение, я думал об использовании функции ранее, но она не работала, кстати, я смог обойтись без нее, мне просто пришлось изменить индекс в операторе if.
@Augustkarlstorm теперь работает, но всегда выводит 0 в 4-м простом числе, даже если его не вводили. Пример: 1-е простое число: 1 2-е простое число: 7 3-е простое число: 73 4-е простое число: 0 5-е простое число: 5