[C++] getline()

di il
12 risposte

[C++] getline()

Ciao a tutti,

sto scrivendo un programma che legge da un file .txt determinati oggetti e li salva in una struct. Questo programma deve anche permettere di cercare all'interno di questa struct un determinato oggetto tramite id.
#include "general.h"
#include <iostream>
#include <fstream>
#include <vector>

#define maxItem 100

struct item{
	int id;
	std::string name;
} something[maxItem];

int read_db()
{
	//read database
	
	int i = 0;

	std::ifstream dbFile("db.txt");

	if(dbFile.fail())
	{
		std::cout << "Error while opening database file" << std::endl;
		return -1;
	}
	else
	{
		std::cout << "File is open" << std::endl;

		while ( !dbFile.eof() )
		{
			//qui mi da l'errore.. "identifer getline is undefined"
			getline(something[i].id, 4, "\t");
			getline(something[i].name, 20);

			std::cout << something[i].id << " " << something[i].name << std::endl;
			i++;
		}
		dbFile.close();

		return 0;
	}	
	return -1; 
}
qualche consiglio su come leggere riga per riga il file ?

il file ha questo formato

1	mestolo
2	pentola
10	forchetta
99	bottiglia

12 Risposte

  • Re: [C++] getline()

    Getline fa parte del namespace std.
    Fai come hai fatto col resto: std::getline(.....) oppure se devi leggere da file dbFile.getline(.....)
  • Re: [C++] getline()

    Mi dice "Error namespace std has no member getline"

    .. non capisco.. :/ gli argomenti che passo a getline sono giusti no ?
  • Re: [C++] getline()

    Non sono giusti. getline ha più versioni e in tutte le versioni salva il contenuto letto in una stringa. In una delle tue righe tu li stai faccendo salvare i dati in un intero.
    http://www.cplusplus.com/reference/iostream/istream/getline/
  • Re: [C++] getline()

    Perche stai usando getline se l'operatore >> può farti il lavoro?
    
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    #define maxItem 100
    
    struct item{
       int id;
       std::string name;
    } something[maxItem];
    
    int read_db()
    {
       //read database
       
       int i = 0;
    
       std::ifstream dbFile("db.txt");
    
       if(dbFile.fail())
       {
          std::cout << "Error while opening database file" << std::endl;
          return -1;
       }
       else
       {
          std::cout << "File is open" << std::endl;
    
          while (dbFile >> something[i].id >> something[i].name)
          {
             std::cout << something[i].id << " " << something[i].name << std::endl;
             i++;
          }
          dbFile.close();
    
          return 0;
       }   
       return -1;
    }
    
    int main()
    {
    	read_db();
    }
    
  • Re: [C++] getline()

    Azz.. esiste un metodo in std che mi può convertire una stringa in int ? perché mi serve a tutti i costi un integet come id -.-
  • Re: [C++] getline()

    Estrai il dato direttamente in intero come da mio esempio. l'operatore >> fa le conversioni del caso.
    Per info cmq in std:: esiste (a partire da C++11) la funzione std::stoi ma devi avere un compilatore che supporti il c++11. Se no puoi convertire una stringa in un int con la funzione CRT atoi(string::c_str());
  • Re: [C++] getline()

    Ok perfetta la tua versione
    mi da solo un errore al secondo operatore >> nel while e nel terzo del cout
    
    while (dbFile >> something[i].id >> something[i].name)
    		{
    			std::cout << something[i].id << " " << something[i].name << std::endl;
    			i++;
    		}
    
  • Re: [C++] getline()

    Ma che compilatore usi? Il codice l'ho provato se no non l'avrei messo. Da notare che ho aggiunto anche il header <string>
  • Re: [C++] getline()

    Fail perfetto non avevo visto l'header :/ :/ sono ancora alle prime esperienze con c++...

    uso visual studio ultimate edition che ha messo a disposizione la scuola
  • Re: [C++] getline()

    Io il Pro 2010. Se è il 2010 anche il tuo hai a disposizione anche un bel po di implementazione del C++11 che male non fanno.
  • Re: [C++] getline()

    Si é il 2010.. dove le trovo quelle implementazioni c++11 ? così do un'occhiata
  • Re: [C++] getline()

    Sono cose un pò avanzate cmq se vuoi vederli una lista è quà.
    http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx
Devi accedere o registrarti per scrivere nel forum
12 risposte