DOMANDA Gestione Di File In C++

Pubblicità

davicos

Utente Attivo
Messaggi
226
Reazioni
11
Punteggio
43
Salve a tutti,
circa questo codice:

C++:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <iomanip>

using namespace std;

void outputLine(string &name, int eta)
{
    cout << left << setw( 10 ) << name << setw( 13 )
    << eta << setw( 7 ) << setprecision( 2 ) << right << endl;
}

int main ()
{
    string name;
    int eta;

    ifstream myfile ("example.txt");
    if (myfile.is_open())
    {
        while ( myfile >> name >> eta )     
        {                                   
          outputLine(name, eta);
        }

    myfile.close();
    }

    else cout << "Unable to open file";



    return 0;
}

ho un file con alcuni nomi con affianco l'età. Vorrei sapere come posso fare per confrontare ad esempio l'età di due persone poste in righe diverse.
Le variabili "nome" ed "eta" mi leggono le colonne dei nomi e delle età rispettivamente ma come faccio ad prendere due nomi (o anche due età) ed inserirle in altre variabili per confrontarle?

Grazie.
 
Ho risolto diciamo a metà, nel senso che nel while ho inserito dei vettori di interi per l'età e di stringhe per i nomi.
Il problema è che se uso i vettori devo conoscere a priori quante righe sono presenti nel file.
Si può ovviare a tale inconveniente?

Grazie!
 
Ho risolto diciamo a metà, nel senso che nel while ho inserito dei vettori di interi per l'età e di stringhe per i nomi.
Il problema è che se uso i vettori devo conoscere a priori quante righe sono presenti nel file.
Si può ovviare a tale inconveniente?

Grazie!
Vettori in che senso? Perché la classe vector ha il metodo push_back() che non ti richiede di sapere la dimensione e la aumenta ogni volta tu la chiami con parametro il dato da aggiungere.
 
Gli array intendo.
Il codice modificato è il seguente:

C++:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <iomanip>

using namespace std;

const int n = 2;

void outputLine(string &nome, int eta)
{
    cout << left << setw( 10 ) << nome << setw( 13 )
    << eta << setw( 7 ) << setprecision( 2 ) << right << endl;
}

int main ()
{
    string nome;
    int eta, i=0, z;

    int et[n];
    string nom[n];

    ifstream myfile ("example.txt");
    if (myfile.is_open())
    {
        while ( myfile >> nome >> eta )
        {
          outputLine(nome, eta);
          nom[i] = nome;
          et[i] = eta;


          i++;
        }

    myfile.close();
    }

    else cout << "Unable to open file";


    for(int i=0; i<2; i++)
    {
        cout << "prova: " << endl;
        cout << nom[i] << " " << et[i] << endl;
    }



    return 0;
}


la dimensione degli array è n=2 in quanto nel file.txt sono presenti due nomi con le rispettive età.
Se non conosco a priori quante righe sono presenti nel file (ergo quanti nomi ed età) gli array sono abbastanza inutilizzabili no?
Quindi come ovviare?

Grazie.

PS. del metodo che hai citato non ne so nulla. Ma se funziona..
 
Usa la classe vector, come già stai usando la classe string.
Dichiara un vector<int> et e un vector<string> nom.
Poi nel while:
C++:
#include <vector>
#include <string>
using namespace std;

...
{
    vector<int> et;
    vector<string> nom;
    ...
    while(...)
    {
        ...
        et.push_back(eta);
        nom.push_back(nome);
     }
...
}

Cambia nome ai vettori però, che non hanno alcun senso
 
Ok ma come faccio ad esempio a stampare, fine lettura del file, il nome posto ad una certa riga?
Con gli array metto il numero della cella e me la stampa ma con questo metodo come faccio? Non l'ho mai usato..

Grazie!
 
Ah ok visto. Nel link che mi avevi dato precedentemente non ero nella pagina giusta e c'era solo la descrizione.
Grazie!
 
Ah ok visto. Nel link che mi avevi dato precedentemente non ero nella pagina giusta e c'era solo la descrizione.
Grazie!
Beh se è menzionato un qualsiasi operatore nella classe ovvio che si intende che quell’operatore è sovraccaricato per quel tipo/classe.
Stessa cosa vale per gli operatori di estrazione e inserimento di bit che sono dichiarati come friend solitamente
 
Non è tanto ovvio per chi queste cose ancora non le ha viste. Sono alle prime armi ancora ecco.
Comunque grazie!
 
Pubblicità
Pubblicità
Indietro
Top