Quick Q - Не могу записать в файл вывод функции

0

Код:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void printVector (const vector<string>& theVect, vector<bool>& bArray, int nItems){
    for (int i = 0; i < nItems; ++i)
       if (bArray[i] == true)
         cout << theVect[i] << " ";
         outFile << theVect[i];
    cout << "\n";
    outFile << "\n";
}

void nCombination(const vector<string> &Vect,int n, int r){

    vector<bool> myBits(n, false);  // everything is false now
    int count = 1; 
    for (size_t i = n-1; i >= 0 && count <= r; --i, ++count){
        myBits[i] = true;
    }
    do  // start combination generator
    {
       printVector(Vect, myBits, n );
    } while (next_permutation(myBits.begin(), myBits.end()));;  // change the bit pattern
}

void nPermutation(vector<string> o, int r){
    do {
        for(int count = 0; count < r; count++){
        cout << o[count] << " " ;
        outFile << o[count] << " ";
    }
        cout<< endl;
        outFile << endl;
    } 
    while (next_permutation(o.begin(), o.end()));
}

int main(int argc, char** argv) {

int numofOps;
char Op;
int n;
int r;
string line;

    ifstream myFile("infile.dat");
    myFile >> numofOps;
    myFile.ignore(1,'\n');

    ofstream outFile;
    outFile.open ("example.txt");

    for(int q = 0; q < numofOps; ++q){
    myFile.get(Op);
    myFile >> n;
    myFile>> r;

    vector<string> original(n);
    for(int i = 0;i <= n - 1; i++){
        myFile.ignore(1,'\n');
        myFile >> original[i];}

    myFile.ignore(1,'\n');

    sort(original.begin(), original.end());

    cout<< '\n'<< endl;


    if(Op == 'P'){
        nPermutation(original, r);
    }
    else{
        if(Op == 'C')
            nCombination(original,n,r);
        else
            cout << "Incorrect Input" << endl;
    }
    original.clear();
    }
    outFile.close();
    return 0;
}

Мой код работает, но когда я добавляю в outFile для записи всего в файл, называемый примером, он не работает. Как я могу распечатать результат функций?

Примеры были бы такими приятными !!

  • 0
    Вы не можете получить доступ к outFile из другой функции, потому что она имеет локальную область видимости для main . Либо передайте его как другой параметр, либо сделайте outFile глобальным - последний менее предпочтителен.
  • 0
    Даже если я сделаю его глобальным, он компилируется, но в файл ничего не записывается? Любая помощь??
Теги:
function
ofstream

1 ответ

1

Одна непосредственная проблема, приходящая на ум:

if (bArray[i] == true)
     cout << theVect[i] << " ";
     outFile << theVect[i];

Python - единственный язык, о котором я знаю, который использует отступы для управления блокировкой операторов. В языках на основе C вы должны использовать фигурные скобки:

if (bArray[i] == true) {
     cout << theVect[i] << " ";
     outFile << theVect[i];
}

Кроме того, код, который вы указали, даже не должен компилироваться. Вы создаете outFile как локальный параметр внутри main() затем outFile использовать его в других функциях, где он недоступен.

Вы должны либо сделать это "глобальным", переместив его из main() чтобы каждая функция могла его видеть (неразумное, но, вероятно, самое быстрое решение здесь), либо передать его как параметр каждой функции, которая должна его использовать.

Для первого вы можете использовать:

using namespace std;
ofstream outFile;     // taken from main().

Для последнего вопрос заключается в добавлении его для каждого вызова printVector(), nCombination() и nPermutation() и изменения этих функций, чтобы они его принимали, например:

void nPermutation (
    vector<string> o,
    int            r,
    ofstream       os
) {
    os << "blah blah blah\n";
}
:
nPermutation (original, r, outFile);
  • 0
    Даже если я сделаю его глобальным, он компилируется, но в файл ничего не записывается? Любая помощь??
  • 0
    Вы помните, чтобы открыть его, в основном?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню