Динамическое выделение памяти для массива внутри функции.Из- за ошибки инициализации в строке if (numbers[i]) выходной массив остаётся пустым

Рейтинг: 0Ответов: 1Опубликовано: 20.04.2023

Задание:реализовать функцию, формирующую выходной массив нечетных чисел B на основе входного целочисленного массива A такой, что каждый элемент выходного массива

  • получен путем суммирования наиближайших элементов входного массива для получения нечетного числа.
  • равен элементу в той же позиции входного массива, если он нечетный Глобальные параметры использовать запрещено; допустимо использование дополнительных функций. Использовать только динамические массивы, ввод и вывод данных должен быть осуществлен в текстовый файл. Во входном и выходном файле необходимо указать размерность массива (массивов), размерность выходного массива определяется реализуемой функцией и является возвращаемым значением. Вход: 9- 3,11,3,6, 7,6,7,9,3 ; Выход 3- 11,7,3 ; 3 и 9 размеры массивов. Мой код:
#include <iostream>
#include <cmath>
#include<fstream>
#include <ctime>
using namespace std;

bool checkPrime(int number)

{
    if (number <= 1) {
        return false;
    }
    for (int i = 2; i * i <= number; i++) {
        if (number % i == 0) {
            return false;
        }
    }
    return true;
}


int main()
{
    

    setlocale(LC_ALL, "ru");
    int size;
    cout << "Введите длинну массива:" << endl;
    cin >> size;
    int* numbers = new int[size];
    char ch;
    int count = 0;

    ifstream f("text.TXT");
    while (!(f.fail() || f.eof()) && count < size)
    {
        f >> numbers[count++];
        f >> ch;
    }
    int isprime = 0;
    int prime_counter = 0;
    int every_second_prime_size = 0;
    int Size = 100;

    cout << "\n Исходный массив: \n";
    for (int i = 0; i < count; i++)
    {
        cout << numbers[i] << ' ';
    }

    f.close();
    int n = sizeof(*numbers) / sizeof(numbers[0]);
    int* every_second_prime = new int[Size];



    cout << "\n Получившийся массив: \n";

    for (int i = 0; i < n; i++) 
    {

        if (checkPrime(numbers[i])) здесь выходит предупреждение и написано массив не инициализирован.

        {
            prime_counter++;
            if (prime_counter % 2 == 0) {
                every_second_prime[every_second_prime_size++] = numbers[i];
            }
        }

    }

    for (int i = 0; i < every_second_prime_size++; i++)
    {
        cout << every_second_prime[i] << ' ';

    }
    return 0;


    for (int i = 0; i < count; i++) {

        ofstream file("text1.TXT", ios_base::app);
        if (file.is_open()) {

            file << every_second_prime[i] << " ";
        }
        else
            cout << "Файл не найден!" << endl;
    }


}

И из- за ошибки инициализации в строке if (numbers[i]) выходной массив остаётся пустым

Ответы

▲ 0
int n = sizeof(*numbers) / sizeof(numbers[0]);

Здесь точно что-то не то: *numbers равен numbers[0], а значит результат равен 1, независимо от вашего массива.