Ofstream создает только пустой файл, но не пишет - PullRequest
1 голос
/ 25 сентября 2019

Я хочу, чтобы мои массивы печатались как "testOutput.txt", но когда я запускаю код, он просто создает пустой файл и не записывает.

Кроме того, мой код вызывает ошибку сегментации, что я настоятельноподозреваю, что вызывает проблему сейчас.Но я понятия не имею, почему это происходит и почему не было ошибок при тестировании с помощью std :: cout.

Я тестировал эти данные с помощью std :: cout вместо ofstream fout, и он работал хорошо, как и яожидается.

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>

    /*
        Functions are defined here
    */

    int main(int argc, char *argv[])
    {
        int i, j, k, len1, len2, len3, max1, max2, min1, min2, index, input4, input5, input6, c, theDeleted, pos0;
        int* arr1;
        int* arr2;
        int* arr3;
        int* duplicate;

        std::string line;
        std::string test;
        std::string errorMessage = "Error: It is not a numeric input.\n";
        std::stringstream ss;

        std::ifstream fin("testInput.txt");

        std::getline(fin, line);
        ss.str(line);
        ss >> test;
        if (isNumeric(test))
        {
            len1 = std::stoi(test);
            arr1 = new int[len1];
        }
        else
        {
            std::cout << errorMessage;
            return 0;
        }
        ss >> test;
        if (isNumeric(test))
        {
            len2 = std::stoi(test);
            arr2 = new int[len2];
        }
        else
        {
            std::cout << errorMessage;
            return 0;
        }

        std::getline(fin, line);
        ss.clear();
        ss.str(line);
        for (i = 0; i < len1; i++)
        {
            ss >> test;
            if (isNumeric(test))
            {
                arr1[i] = std::stoi(test);
            }
            else
            {
                std::cout << errorMessage;
                return 0;
            }
        }

        std::getline(fin, line);
        ss.clear();
        ss.str(line);
        for (i = 0; i < len2; i++)
        {
            ss >> test;
            if (isNumeric(test))
            {
                arr2[i] = std::stoi(test);
            }
            else
            {
                std::cout << errorMessage;
                return 0;
            }
        }

        ss.clear();
        fin >> input4 >> input5 >> input6;

        if (fin.is_open())
            fin.close();

        std::ofstream fout("testOutput.txt");

        max1 = maxElement(arr1, len1);
        max2 = maxElement(arr2, len2);
        min1 = minElement(arr1, len1);
        min2 = minElement(arr2, len2);
        fout << "1)\narr1: " << max1 << "\narr2: " << max2 << "\n";
        fout << "2)\narr1: " << min1 << "\narr2: " << min2 << "\n";
        fout << "3)\narr1: " << min1 << " " << max1 << "\narr2: " << min2 << " " << max2 << "\n";

        fout << "4)\n";                                                                             //4
        sortAscBub(arr1, len1);
        sortAscBub(arr2, len2);
        fout << "arr1: ";
        for (i = 0; i < len1; i++)
            fout << arr1[i] << " ";
        fout << "\narr2: ";
        for (i = 0; i < len2; i++)
            fout << arr2[i] << " ";
        fout << "\n";

        fout << "5)\n";                                                                             //5
        sortDscSel(arr1, len1);
        sortDscSel(arr2, len2);
        fout << "arr1: ";
        for (i = 0; i < len1; i++)
            fout << arr1[i] << " ";
        fout << "\narr2: ";
        for (i = 0; i < len2; i++)
            fout << arr2[i] << " ";
        fout << "\n";

        fout << "6)\narr3: ";                                                                           //6
    //  merge(arr1, arr2, arr3, len1, len2, len3);
        i = len1 - 1, j = len2 - 1, k = 0;
        len3 = len1 + len2;
        arr3 = new int[len3];
        while (k < len3)
        {
            if (i < 0)
                arr3[k++] = arr2[j--];
            else if (j < 0)
                arr3[k++] = arr1[i--];
            else if (arr1[i] < arr2[j])
                arr3[k++] = arr1[i--];
            else
                arr3[k++] = arr2[j--];
        }
        for (i = 0; i < len3; i++)
            fout << arr3[i] << " ";
        fout << "\n";
        delete[] arr1;
        delete[] arr2;

        index = searchElement(input4, arr3, len3);
        fout << "7)\nIndex: " << index << "\n";                                                     //7

    //  removeDupe(arr3, len3, duplicate, c);
        j = 0, c = 0;
        int check = -1;
        int* temp1;
        int* temp2;
        temp1 = new int[len3];
        temp2 = new int[len3];
        for (i = 0; i < len3; i++)
        {
            if (check == arr3[i])
            {
                if (c=0)
                {
                    temp2[c++] = check;
                }
                else if (check != temp2[c - 1])
                {
                    temp2[c++] = check;
                }
            }
            else
            {
                temp1[j++] = arr3[i];
                check = arr3[i];
            }
        }
        len3 = len3 - c;
        for (i=0; i< len3; i++)
            arr3[i] = temp1[i];
        for (i=0; i<c; i++)
            duplicate[i] = temp2[i];
        delete[] temp1;
        delete[] temp2;
        fout << "8)\nDuplicate Elements: ";                                                         //8
        for (i = 0; i < c; i++)
            fout << duplicate[i] << " ";
        fout << "\narr3: ";
        for (i = 0; i < len3; i++)
            fout << arr3[i] << " ";
        fout << "\n";

        theDeleted = delIndex(input5, arr3, len3);
        fout << "9)\nElement: " << theDeleted << "\narr3: ";                                            //9
        for (i = 0; i < len3; i++)
            fout << arr3[i] << " ";
        fout << "\n";

        pos0 = searchRecur(input6, arr3, 0, len3);
        insert0(pos0, arr3, len3);
        fout << "10)\narr3: ";                                                                          //10
        for (i = 0; i < len3; i++)
            fout << arr3[i] << " ";
        fout << "\n\n";

        delete[] arr3;
    //  delete[] duplicate;

        fout.flush();

        if (fout.is_open())
            fout.close();

        return 0;
    }

Я ожидаю выходной файл с несколькими цифрами в нем, но файл пуст.

1 Ответ

0 голосов
/ 25 сентября 2019

Я видел в C ++ Ref, что вы неправильно инициализируете ofstream, это выглядит так:

  std::ofstream ofs ("test.txt", std::ofstream::out);

Вы должны передать openmode в функцию инициализации.Вы также можете использовать:

using namespace std;

, чтобы избавиться от всех этих std предложений

...