2016-09-18 1 views
-1

Je suis actuellement dans une classe de structures de données C++ et je suis extrêmement nouveau en C++. Mon but ici est de lire les lignes d'un fichier et de les stocker dans une structure. Les lignes contiennent des éléments d'un livre. Mon problème est que certaines lignes ont des espaces, et je ne sais pas comment les lire correctement dans une structure. Je ne peux pas utiliser correctement getline() pour lire les lignes dans chaque élément de la structure. Si je le lance tel quel, j'obtiens le message error: expected primary expression before 'infile'. Toutes mes excuses si ce post n'est pas formaté correctement, c'est aussi mon premier post de débordement de pile! De l'aide??Utilisation de getline() pour lire l'entrée (avec des espaces) du fichier dans une structure

C'est ce que ma structure ressemble à:

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

Et voilà comment je suis en train de lire des lignes dans la structure:

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++; 
} 

Le fichier texte aura des informations de livres répertoriés comme tels :

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

supprimer le mot '' ifstream' de Infront infile'. – kfsone

+0

c'est une mauvaise pratique de le faire. écrire des structures dans un fichier et lire struct à partir des fichiers. – Raindrop7

+0

@ Raindrop7 Qui le dit, et pourquoi? Pourriez-vous élaborer à ce sujet s'il vous plaît? –

Répondre

1

1 - d'abord déclarer infile extérieur de la boucle puis l'utiliser. 2 - getline (infile, book [i] ....) n'est pas infile.getline (livre [i] ..., taille, ..) le premier est utilisé avec la chaîne de classe et le second est utilisé avec un tableau de caractères.

afin que votre programme peut ressembler à:

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

Cela a certainement aidé !! Maintenant, ma production est un peu maladroite, mais je dois aller travailler et je vais me débrouiller par la suite. Merci! – jwest91

+0

@ jwest91 ok. Bienvenue. s'il vous plaît s'il était vraiment utile marquer comme réponse acceptée – Raindrop7