Как исправить ошибку, которая приводит к сбою программы - PullRequest
0 голосов
/ 23 марта 2012

По тем или иным причинам я не могу понять, почему данные при открытии не попадают в массивы и происходит сбой программы.Я искал ответ безрезультатно.У меня такое чувство, что я буду публиковать здесь еще несколько раз, прежде чем я закончу эту программу!

#include <iostream>              
#include <string>
#include <fstream>
using namespace std; 

string bookTitle [14];
string bookAuthor [14];
int loadData (string pathname);         
void showall (int counter);

int main ()
{
    int counter;  
    string pathname;

    cout<<"Input the name of the file to be accessed: ";
    cin>>pathname;
    loadData (pathname);
    showall (counter);

    cout<<"Press <Enter> to Exit";
    cin.ignore();
    cin.get();      
    return 0;                
}

int loadData (string pathname) // Loads data from infile into arrays
{
    fstream infile; 
    int counter = 0;
    infile.open(pathname.c_str()); //Opens file from user input in main
    if( infile.fail() )
    {
        cout << "File failed to open";
        return 0;
    }   
    while (!infile.eof())
    {
        cout<<"File Opened";   // I get the "File Opened" text and then a crash
        infile >> bookTitle [14] ;  //takes input and puts into parallel arrays
        infile >> bookAuthor [14];
        cout<<"Data Put in Arrays";
        counter++;
    }

    infile.close();
}

void showall (int counter)        // shows input in title(author) format
{
    cout<<bookTitle<<"("<<bookAuthor<<")";
}

Редактировать: назначение состоит в том, чтобы взять файл с именами в формате, таком как заголовок, автор, заголовок, автор, затем он должен вывести массивы на экран в формате заголовка (автора).* После этого я должен сделать программу зацикливания, чтобы можно было искать поиск по одному из массивов и возвращать запись в формате заголовка (автора).

Вот как теперь выглядит код;

#include <iostream>              
#include <string>
#include <fstream>
using namespace std; 

string bookTitle [50];
string bookAuthor [50];
int loadData (string pathname);         
int showall (int counter);

int main ()

{  
string pathname;
int counter=0;

cout<<"Input the name of the file to be accessed: ";
cin>>pathname;
loadData (pathname);



showall (counter);

cout<<"Press <Enter> to Exit";
cin.ignore();
cin.get();      
return 0;                
}


int loadData (string pathname) // Loads data from infile into arrays
{
    fstream infile; 
    int counter = 0;
    infile.open(pathname.c_str()); //Opens file from user input in main
    if( infile.fail() )
     {
         cout << "File failed to open";
         return 0;
     }   

     while (!infile.eof())
     {

           infile >> bookTitle [counter] ;  //takes input and puts into parallel arrays
           infile >> bookAuthor [counter];
           counter++;
     }

     infile.close();
}

int showall (int counter)        // shows input in title(author) format
{

     cout<<bookTitle<<"("<<bookAuthor<<")";






return 0;
}

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Быстрая проблема, которую я вижу:

 infile >> bookTitle [14] ; 
 infile >> bookAuthor [14];

неверно, что вам нужно:

 infile >> bookTitle[counter]; 
 infile >> bookAuthor [counter];

Также

Переменная counter, объявленная в main() и loadData() - это две разные переменные. Тот, который объявлен в main(), никогда не инициализируется вообще.

1 голос
/ 23 марта 2012

Есть много проблем с этим кодом.

Основная проблема

Эти строки записывают только в 14-ые элементы массивов

infile >> bookTitle [14] ;  //takes input and puts into parallel arrays
infile >> bookAuthor [14];

Для заполнения всегомассив, вам нужно использовать переменную counter для индекса:

infile >> bookTitle [counter] ;  //takes input and puts into parallel arrays
infile >> bookAuthor [counter];

BTW : если размер массива равен 14, то максимальный индекс равен 13. Таким образом, вы не можете получить доступ к элементус индексом 14. И это, вероятно, вызывает сбой.

Другие проблемы, которые я заметил

  • counter в main() не инициализируется
  • showall() функцияпринимает аргумент, но не использует его, что, вероятно, является индексом.
  • showall() вызов в main(), вероятно, должен быть в цикле, чтобы показать все элементы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...