2015-04-29 1 views
0

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

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

using namespace std; 

void Get_Answers(); 

int main() 
{ 
    const int NUM_ANSWERS = 20; 
    char answers[NUM_ANSWERS] = { 'A', 'D', 'B', 'B', 'C', 'B', 'A', 'B', 'C', 'D', 'A', 'C', 'D', 'B', 'D', 'C', 'C', 'A', 'D', 'B' }; 
    string textName; 

    //Fuction for the users answers 
    Get_Answers(); 

    ifstream textIn; 
    textIn.open(textName); 

    if (textIn.fail()) 
    { 
     cout << "\nFile not found; program will end"; 
     return (0); 
    } 

    cout << endl << endl; 
    system("pause"); 
    return(0); 
} 

void Get_Answers() 
{ 
    const int NUM_ANSWERS = 20; 
    char userAnswers[NUM_ANSWERS]; 
    string textName; 

    cout << "\nEnter a text file name "; 
    cin >> textName; 
    ofstream textFileOut; 
    textFileOut.open(textName); 

    for (int i = 0; i < NUM_ANSWERS; i++) 
    { 
     cout << "\nEnter the test answers "; 
     cin >> userAnswers[i]; 

     textFileOut << userAnswers[i] << '\n'; 
    } 
    textFileOut.close(); 
} 
+0

Хорошо ... так в чем вопрос? – Borgleader

+0

Как читать этот текстовый файл, который я сделал в функции «Get_Answers», для главной функции .... или я должен сказать, как я могу вставить текстовый файл в свою основную функцию? – simplegamer

ответ

0

Если вы имеете в виду сохранение каждой строки в массиве, цикл for и getline должны работать хорошо.

Редактировать: судя по вашему предыдущему ответу, я бы сказал, да, это как это сделать.

Чтобы разработать немного больше, простым способом сделать это было бы сделать цикл for, чтобы подсчитать, сколько строк есть, затем перейти к началу файла и сделать еще один цикл: for (int i = 0; i! = Lines; i ++)

Затем в цикле for это массив [i] = getline (файл, строка);

Вы можете использовать while (! File.EOF()) вместо цикла for и цикла while. Я просто предпочитаю получать подсчет строк по какой-то причине.

+0

В основном пользователь вводит 20 ответов в функции Get_answers. Затем ответы записываются в текстовый файл. Моя проблема - idk, как получить ответы текстового файла в мою основную функцию. Извините, если я запутаю любого, кто новичок. – simplegamer

+0

Ну, одна вещь, которую вы можете сделать, если вы хотите сравнить, - это сохранить оба файла, а затем открыть их и сохранить как массивы, используя информацию, которую я разместил. После этого вы можете сделать еще один цикл, который использует данные счетчика и сравнивает элементы массива. Например, если arr [i]! = Arr1 [i], ответ неверен. Возможно, у вас есть переменная для неправильных ответов и правильных ответов, и каждый раз, когда она неправильная, она становится неправильной, в противном случае она увеличивается. – user262163

0

Вы можете сделать это после этого кода:

std::ifstream is ("test.txt", std::ifstream::binary); 
    if (is) { 
    // get length of file: 
    is.seekg (0, is.end); 
    int length = is.tellg(); 
    is.seekg (0, is.beg); 

    char * buffer = new char [length]; 

    std::cout << "Reading " << length << " characters... "; 
    // read data as a block: 
    is.read (buffer,length); 

    if (is) 
     std::cout << "all characters read successfully."; 
    else 
     std::cout << "error: only " << is.gcount() << " could be read"; 
    is.close(); 

    // ...buffer contains the entire file... 

    delete[] buffer; 
    } 

Найдено этот фрагмент кода здесь: http://www.cplusplus.com/reference/istream/istream/read/

Replace "test.txt" с именем файла. Однако ваш основной код не знает, что имя файла создается в Get_Answers().

0

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

Я думаю, что путь C++ сделать это будет:

1) Инициализировать указатель на пустой массив символов в основной функции():

char* userAnswersPointer = new char[NUM_ANSWERS]; 

2) параметризующий вашу функцию Get_Answer() для передать указатель на этот массив:

void Get_Answers(char* userAnswers_Ptr, int N_ANS) { 

//... 

for (int i = 0; i < N_ANS; i++) 
    { 
     cout << "\nEnter the test answers "; 
     cin >> userAnswers_Ptr[i]; 

     textFileOut << userAnswers[i] << '\n'; 
    } 

//... 

} 

3) Используйте его правильно в основной():

int main() { 

    //... 

    Get_Answers(userAnswersPointer, NUM_ANSWERS); 

    //... 

    return 0; 
} 

Я не скомпилировал его, просто написал из головы, поэтому не стесняйтесь проверить это. Это должно дать вам представление о том, как это сделать.

+0

@simplegamer: Если бы какой-либо ответ помог вам, проголосуйте или отметьте его как ответ, чтобы другие пользователи, которые могут наткнуться на этот вопрос, могли бы легче получить правильный ответ на ваш вопрос. – irchris102

Смежные вопросы