2016-09-18 5 views
-1

Я сейчас в классе структур данных C++, и я чрезвычайно новичок в C++. Моя цель здесь - прочитать строки из файла и сохранить их в структуре. Линии содержат элементы книги. Моя проблема в том, что некоторые строки имеют пробелы, и я не уверен, как правильно их читать в структуру. Я не могу правильно использовать getline(), чтобы читать строки в каждом элементе структуры. Если я запустил его как есть, я получаю сообщение error: expected primary expression before 'infile'. Извините, если этот пост не отформатирован правильно, это также мой первый пост переполнения стека! Любая помощь??Использование getline() для чтения ввода (с пробелами) из файла в структуру

Это то, что моя структура выглядит следующим образом:

typedef struct book { 
    char title[100]; 
    char author[100]; 
    char publisher[100]; 
    float price; 
    char isbn[100]; 
    int pages; 
    int copies; 
} Book; 

И это, как я пытаюсь читать строки в структуру:

for (int i=0; i < currentIndex; i++) { 
    getline(ifstream infile, my_book[i].title); 
    getline(ifstream infile, my_book[i].author); 
    getline(ifstream infile, my_book[i].publisher); 
    getline(ifstream infile, my_book[i].price); 
    getline(ifstream infile, my_book[i].isbn); 
    getline(ifstream infile, my_book[i].pages); 
    getline(ifstream infile, my_book[i].copies); 
    currentIndex++; 
} 

Текстовый файл будет книга сведения, перечисленные в качестве таковых :

Magician: Apprentice 
Raymond E. Feist 
Spectra (January 1, 1994) 
5.02 
0553564943 
512 
1 
+0

Удалить слово 'ifstream' Infront из' infile'. – kfsone

+0

Это плохая практика. писать структуры в файл и читать структуру из файлов. – Raindrop7

+0

@ Raindrop7 Кто говорит так, и почему на самом деле? Не могли бы вы рассказать об этом, пожалуйста? –

ответ

1

1 - сначала объявить infile наружным для цикла, а затем использовать его.

2 - getline (infile, book [i] ....) не является infile.getline (книга [i] ..., size, ..) первая используется с строкой класса, а вторая - используется с массивом символов.

так что ваша программа может выглядеть следующим образом:

ifstream infile("data.txt", ios::in); // your data file 

for (int i=0; i < currentIndex; i++) 
{ 
     infile.getline(my_book[i].title , 100, '\n'); 
     infile.getline(my_book[i].author , 100, '\n'); 
     infile.getline(my_book[i].publisher, 100, '\n'); 
     infile >> my_book[i].price; 
     infile.getline(my_book[i].isbn  , 100, '\n'); 
     infile >> my_book[i].pages; 
     infile >> my_book[i].copies; 
     currentIndex++; 
} 
+0

Это определенно помогло! Теперь мой результат немного неуклюж, но я должен идти на работу и позже буду обманывать его. Благодаря! – jwest91

+0

@ jwest91 ok. Добро пожаловать. пожалуйста, если бы это была действительно полезная оценка как принятый ответ – Raindrop7