@marlaaa

Массив указателей на функции. Почему программа не даёт результат?

Мне нужно выполнить функцию, из массива указателей на функцию, номер которой я укажу в консоли. Почему не выполняется?
#include <fstream> 
#include <iostream> 
#include <string> 
using namespace std;
//текст второго задания
    int filess() {

        int a[25] = { 0 };

        ofstream file("proertyy.txt");

        for (int i = 0; i < 24; i++)

        {

            a[i] = rand() % 10 + 1;

            file << a[i];

        }

        file << endl;

        file.close();

        return 0;

    }
    int n2()

    {
        filess();
        ifstream readfile("proertyy.txt", ios::in | ios::binary);
        const int strings = 25;
        char mass[strings] = { 0 };
        if (!readfile.is_open()) {
            cout << "Файл не открыт" << endl;
        }
        else {
            cout << "Файл открыт" << endl;
        }
        for (int i = 0; i < strings; i++)
        {
            readfile >> mass[i];
            cout << mass[i] << endl;
        }
        readfile.close();
        int buff = 0;
        int i, j;
        for (i = 1; i < strings; i++)
        {
            buff = mass[i];
            for (j = i - 1; j >= 0 && mass[j] > buff; j--)
                mass[j + 1] = mass[j];
            mass[j + 1] = buff;
        }
        ofstream ofile;
        ofile.open("proertyy.txt", ios::app); ;
        if (!ofile.is_open()) {
            cout << "Файл не открыт" << endl;
        }
        else {
            cout << "Файл открыт" << endl;
        }
        for (int i = 0; i < strings; i++) {
            cout << mass[i];
            ofile << mass[i];
        }
        ofile.close();
        return 0;
    }

//текст третьего задания
    int n3()
    {
        int N;
        cout << "Введите N:" << endl;
        cin >> N;
        ofstream file("proga.txt");
        if (N < 27 && N>0) {
            for (int i = 0; i < N; i++)
            {
                for (char j = 'A'; j <= 'A' + i; j++) {
                    file << j;
                }
                for (int e = 1; e < N - i; e++) {
                    file << "*";
                }
                file << '\n';
            }
        }
        else {
            cout << "Введите число от 0 до 27";
        }
        file.close();
        return 0;
    }
//текст четвертого задания
    int n4() {
        ifstream file("proga.txt");
        if (!file) {
            cout << ": неудалось открыть файл" << endl;
            return 0;
        }
        size_t par = 0;
        while (file) {
            string s;
            getline(file, s);
            if (s.substr(0, 5) == "     ") {
                par++;
            }
        }
        cout << "количество абзацев: " << par << endl;
        return 0;
    }


    int menu(int y) {
        cout << "Выберите номер"<<endl;
        cout << "1.Запустить функцию 2 задания"<<endl;
        cout << "2.Запустить функцию 3 задания"<<endl;
        cout << "3.Запустить функцию 4 задания"<<endl;
        cout << "4.Запустить функцию 5 задания"<<endl; 
        cin>>y;
        return y;
    }
    int main()
    {
        ofstream jj("itog.txt");
        setlocale(LC_ALL, "Russian");
        int (*mass[3])() = { n2,n3,n4 };

        int y = 0;
        menu(y);
        switch (y)
        {
        case 1:
            jj.open("itog.txt");
            if (!jj) {
                cout << ": неудалось открыть файл" << endl;
                return 0;
            }
            mass[0];
            jj.close();
        case 2:
            jj.open("itog.txt");
            if (!jj) {
                cout << ": неудалось открыть файл" << endl;
                return 0;
            }
            mass[1];
            jj.close();
        case 3:
            jj.open("itog.txt");
            if (!jj) {
                cout << ": неудалось открыть файл" << endl;
                return 0;
            }
            mass[2];
            jj.close();
        default:
            break;
        }

    }
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Мне нужно выполнить функцию, из массива указателей на функцию, номер которой я укажу в консоли. Почему не выполняется?

Потому что mass[0]; -- это не вызов функции, а просто указатель. Вызов функции выглядит так: mass[0]();
Ответ написан
Комментировать
@Akela_wolf
Extreme Programmer
В дополнение к ответу jcmvbkbc
Потому что вы игнорируете возвращенный функцией menu результат, соответственно в переменной y всегда 0.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы