Problema con programmino in c++

di il
6 risposte

Problema con programmino in c++

Ciao a tutti,
premetto di essere alla prime armi con il c++ e per informazione lavoro da ubuntu.
Devo creare un programmino che sia in grando di prendere e leggere un file esterno (nel file esterno ci dovrebbero essere solo numeri, ma potrebbero esserci anche altri caratteri che non vanno considerati).
Una volta presi questi numeri devo creare un istogramma, per ora quando parlo di istogramma mi occorre solamente suddividere i vari numeri presi dal file esterno (ad esempio con numeri minori di 25, compresi fra 25 e 50 ecc) e incrementare ogni volta una variabile, come ho fatto qua sotto.

#include <iostream>
#include <fstream>
using namespace std;


void spazzino(ifstream &carolina, int &k)        //funzione spazzino
      {char c;
       carolina . clear();
       k--;
       
       while(
           (c = carolina . peek()) != ' '
              && 
            c != '\n'
              &&
            c != '\t' 
              &&
           (c < '0' || c > '9')
              &&
            c != '.'
              && ! carolina . eof()
             ) carolina.get();
       } 




int main(int narg, char ** args, char ** env)
{
     cout<<" Questo programma serve a fare un istogramma di dati ricevuti da un file esterno "<<endl;
     

  if(narg < 2)
   {
     cout << "devi dare un nome di file\n"; return 0;
    }


    ifstream input(args[1]);               //prende il file esterno
    int i,n,a,b,c,d;
    a=0; b=0; c=0; d=0;
    void *punta;
    double valore;
    double array[i];


    
         for ( ; ;i++)                    //acquisisce i dati all'interno del file esterno
         { 

      if(input)
      {
          input >> valore;
          if(input . eof()) break;
          spazzino(input,i);


          for (n=0; n<i; n++)            // riempio un array con i dati trovati
          cin>>array[i];


      }


      else {cout<<"problemi con il file in acquisizione "<<endl;}

        }


        for (n=0; n<i; n++)                               //riempio il grafico
            array[i] < 25 ;          
            a++;
        for (n=0; n<i; n++)                               
            array[i] > 25 && array[i] < 50 ;          
            b++;
        for (n=0; n<i; n++)                               
            array[i] > 50 && array[i] < 75 ;          
            c++;
        for (n=0; n<i; n++)                               
            array[i] > 75 && array[i] < 100 ;          
            d++;
        

cout<<"a= "<<a<<endl;
cout<<"b= "<<b<<endl;
cout<<"c= "<<c<<endl;
cout<<"d= "<<d<<endl;

        
}           
Quello che è scritto fin'ora è corretto? e se è corretto come riesco a dire al programma di prendere il file esterno?
Grazie in anticipo

6 Risposte

  • Re: Problema con programmino in c++

    Allora cerchiamo di capire:
    Questi numeri sono tutti double, tutti int, tutti cosa oppure possono essere qualsiasi tipo di numero.
    l'operatore >> del iostream estrae dall'input dei dati formattati se ci riesce oppure mette il failbit se non c'è riuscito. Quindi tu prendi i numeri dall'input finche l'operatore ci riesce e se non ci riesce salta il blocco dei non numeri. Alla fine con std::count_if conta quanti elementi soddisfano le condizioni.
  • Re: Problema con programmino in c++

    Non ha grande importanza che tipo di numeri sono, non hai fini del programma, per questo credo di aver messo un tipo double.
    non mi è chiara l'idea di quello che mi ha scritto però... cioè quello che mi dici di fare tu lo devo fare al posto di quello che ho fatto io oppure va aggiunto?
    la mia idea era creare un array dove metterci tutti i numeri presi dal file esterno, una volta dentro l'array volevo selezionarli.
  • Re: Problema con programmino in c++

    Tu stai prendendo un "CARATTERE ALLA VOLTA" che non è un numero. Un numero è fomato da + cifre e questo non lo stai tenendo in conto. Questo è un piccolo esempio "non provato" di numeri presi dal cin escludendo altri dati che non sono numeri.
    
    int main()
    {
    	int a;
    	do
    	{
    		if(cin >> a)
    			cout << a << endl;
    		if((cin.rdstate() & iostream::failbit ) != 0)
    		{
    			cin.clear();
    			cin.ignore();
    		}
    	}while(cin.good());
    }
    
    sostituisci il cin con il tuo stream e vedi se funziona.
  • Re: Problema con programmino in c++

    Il fatto è che volevo farlo con ifstream, in ogni caso cosi mi sembra anche più intuitivo oltre che più semplice.
    Anche se alla compilazione non mi desse errori, come faccio a creare il file esterno da cui prendere i dati?
  • Re: Problema con programmino in c++

    
    string nomeFile;
    cout << "inserisci nome file";
    cin >> nomeFile;
    
    ifstream file(nomeFile.c_str());
    
  • Re: Problema con programmino in c++

    Ok grazie mille! ho risolto
Devi accedere o registrarti per scrivere nel forum
6 risposte