Попытка прочитать текстовый файл C ++ - PullRequest
0 голосов
/ 11 апреля 2011

Используя Dev C ++, мы пытаемся заставить код читать его по одной строке за раз и сохранять в виде массива. Кажется, мы не получаем никаких официальных ошибок, но на экране появляется окно с окошком, чтобы найти решение для ошибок?

#include <iostream>
#include <fstream>
#include "AddressBook.h"

const int ADDR_BOOK_SZ  = 1000;

void AddNewAddressBook(AddressBook* current);
void PrintAddresses(AddressBook* addrBook);

using namespace std;
int main(int argc, char** argv) {
    AddressBook addrBook[ADDR_BOOK_SZ];
    AddressBook* current;
    char* path;
    ifstream file;
    char* placeholder;
    bool running = true;
    char entered;
    while(running) {
        //print directions
        cout << "a) Open an address book file\n" 
        << "b) Add a new address book entry\n" 
        << "c) Print the contents of current address book\n" 
        << "d) Quit" << endl;

    //get the user's command
    cin >> entered;

    //set pointer to the current addressbook
    current = addrBook + AddressBook::entryCnt_;

    if(entered == 'a') {
         cout << "Please enter the file path for the address book file: " << '\n';
          cin >> path;
          file.open(path);
          int i = 0;
          while(!file.eof()){

              //getline(placeholder, 100);
              file >> placeholder;
              addrBook[i].SetFirstName(placeholder);
              file >> placeholder;
              addrBook[i].SetFirstName(placeholder);
              file >> placeholder;
              addrBook[i].SetStreetNum((int)placeholder);
              file >> placeholder;
              addrBook[i].SetStreetName(placeholder);
              file >> placeholder;
              addrBook[i].SetCity(placeholder);
              file >> placeholder;
              addrBook[i].SetState(placeholder);
              file >> placeholder;
              addrBook[i].SetZipCode((int)placeholder);            
              i++;      
          }
    } 
    else if(entered == 'b') {
        current->AddEntryFromConsole();

    }
    else if(entered == 'c') {
        for(int i = 0; i < AddressBook::entryCnt_; i++) {
            addrBook[i].PrintToConsole();
        }
    }
    else if(entered == 'd') {
        return 0;
    }
    else {
        cout << "Wrong input entered. Try again." << endl;
    }
}
file.close();

}

Спасибо за любую помощь!

1 Ответ

1 голос
/ 11 апреля 2011

Что делает ifstream :: operator >> с унитализированным символом * (или, если на то пошло, с инициализированным символом *).Я думаю, вы хотите строку вместо символа * == прямо сейчас, я думаю, что вы читаете в случайную память.

Так что, чтобы было ясно, попробуйте заменить

char* path;

с

string path

и

char* placeholder;

с

string placeholder;

Вам также нужно добавить:

#include <string>

Имейте в виду, это просто на основе быстрого обзора кода.

...