[C++] ordine lettura cin

di il
9 risposte

[C++] ordine lettura cin

Dopo aver dichiarato un array di stringhe chiamato file[n] faccio immettere all'utente i nomi di alcuni file da aprire successivamente con questo codice
 cout << "Inserire i nomi dei file di input(terminare dando la barra spaziatrice): ";

    int ord = -1;
    do
    {
        ord++;
        getline(cin,file[ord]);
        cout << file[ord] << ord;  // questa istruzione è funzionale a capire il problema
    }while (file[ord] != " ");
Il problema è che l'output dà

Inserire i nomi dei file di input(terminare dando la barra spaziatrice): 0NOMEIMMESSODALL'UTENTE1 2

il che mi fa capire che il primo nome del file viene memorizzato in file[1] e non file[0] com'era mia intenzione. Perché si comporta così?

p.s. Naturalmente il problema è risolvibile impostando ord = -2 prima del ciclo ma voglio capire perché si comporta così

9 Risposte

  • Re: [C++] ordine lettura cin

    Cosa c'è prima di questo ciclo?
  • Re: [C++] ordine lettura cin

    C'è semplicemente la dichiarazione: string file[2];
  • Re: [C++] ordine lettura cin

    Puoi postare tutto il codice (compreso di main, include ...) in modo da poterlo compilare ed eseguire così come fai tu ?
  • Re: [C++] ordine lettura cin

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    const int NUM_FILE = 2;
    
    string converter (double ms);
    
    int main()
    {
        string file[NUM_FILE],filevar;
        double masstolerance,timetolerance;
        char discard,response;
    
        ifstream inVar;
    
        cout << "File contenente le variabili: ";
        getline(cin,filevar);
    
        inVar.open(filevar.c_str());
    
        cout << "Tolleranza di massa: ";
        cin >> masstolerance;
    
        cout << "Tolleranza sul tempo di ritenzione: ";
        cin >> timetolerance;
    
        cout << "Creare un file di output per ogni ms@RT trovata?(y/n)";
        cin >> response;
    
        cout << "Inserire i nomi dei file di input(terminare dando la barra spaziatrice): ";
    
        int ord = -1;
        do
        {
            ord++;
            getline(cin,file[ord]);
            cout << file[ord] << ord;
        }while (file[ord] != " ");
    
        return 0;
    }
  • Re: [C++] ordine lettura cin

    Quindi non è vero che

    roov_raven ha scritto:


    C'è semplicemente la dichiarazione: string file[2];
    ... ci sono tante altre righe di codice ... e quella che causa il tuo problema è la

    cin >> response;

    perché accetta un solo char facendo restare il "return" nel buffer di input dando fastidio al primo input nel ciclo. Per rimediare devi pulire il buffer di input aggiungendo, subito dopo l'input di response, la riga

    cin.ignore();
  • Re: [C++] ordine lettura cin

    Con "return" intendi il carattere newline?
  • Re: [C++] ordine lettura cin

    Sì ... Invio ... come vuoi chiamarlo ...
  • Re: [C++] ordine lettura cin

    Quindi il tipo string non ignora il carattere ' \n ' come invece farebbe un tipo int?
  • Re: [C++] ordine lettura cin

    Non è una questione di tipi ... la getline accetta il newline che è rimasto nel buffer.
Devi accedere o registrarti per scrivere nel forum
9 risposte