Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    [c++]tipo di dato caricato da file?

    io ho un file di testo con scritto dentro tanti numeri.. così:

    1
    2
    3
    4
    5
    6
    ecc

    carico tutto dentro ad un array..ora:

    i dati caricati di che tipo sono?!

    Dovrei utilizzarli in una funzione che fa passare i vari elementi e guarda se sono maggiori o minore di 0..grazie.
    p.s quello che mi chiedevo io è di fatto se sono obbligato a convertirli in un tipo intero con atoi ad esempio..

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [c++]tipo di dato caricato da file?

    Originariamente inviato da cleaner
    i dati caricati di che tipo sono?!
    Dipende da come hai dichiarato l'array... se è un array di interi, saranno letti come interi; se è di tipo char, come caratteri.
    every day above ground is a good one

  3. #3

    Re: [c++]tipo di dato caricato da file?

    Originariamente inviato da cleaner
    io ho un file di testo con scritto dentro tanti numeri.. così:

    1
    2
    3
    4
    5
    6
    ecc

    carico tutto dentro ad un array..ora:

    i dati caricati di che tipo sono?!
    Dipende da come li hai caricati.
    ---EDIT---
    Tardi...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ehm, ma se lo dichiaro come tipo intero l'array poi mi da errore nel punto cui ci carico dentro i dati:

    while(leggidafile.get(dati[i]))

    la funzione get presumo prenda solo char..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosa e'

    leggidafile

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    o usi una delle forme sovraccaricate della get che è

    codice:
    int get();
    oppure usi l'operatore >> che vale sia per gli interi che per i caratteri.
    every day above ground is a good one

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    @
    oregon: l'oggetto di flusso stream


    mm, vi posto il codice e l'es così si capisce meglio:

    esercizio->
    1)Realizzare una funzione di nome sottoseq che, presi come suoi parametri un array di
    interi A ed il numero n di elementi in A, determina la sottosequenza di numeri negativi di
    lunghezza massima presente in A. La funzione restituisce come suo risultato la lunghezza della
    sottosequenza trovata. Ad esempio, se A è (4,3,2,-1,-2,-1,2,2,-1,-1,-2,-1,0,3) la
    risposta sarà 4.

    2) Scrivere un programma principale che: (1) richiede all'utente l'anno A ed il nome di un mese
    M; (2) prova ad aprire in lettura un file il cui nome è ottenuto dalla concatenazione della stringa
    M con la stringa A e con la stringa “.dat” (ad es., “maggio2008.dat”); se il file non
    esiste, il programma termina immediatamente dando un opportuno messaggio d'errore; se il file
    esiste, legge dal file una sequenza di numeri interi (max. 10000), li memorizza in un array
    dati e quindi, utilizzando (obbligatoriamente) la funzione sottoseq, determina e stampa la
    lunghezza della massima sottosequenza di numeri negativi presente in dati.
    mio code..
    codice:
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    void sottoseq(int a[],int n)
    {
        int count=0;
        int subcount;
        for(int i=0;i<n;i++)
        {
            if(a[i]<0)
            {
                count++;
            }
            else
            {
                subcount=count;
                count=0;
            }
        }
        cout << count;
    
    
    }
    
    int main()
    {
    
        char a[4]; //dichiaro un tipo char anche se l'anno andrebbe visto come intero, in quanto mi serve per la funz. di concatenazione
        char m [8]; //il mese più lungo al massimo è composto da 8 caratteri
        char sufffile[]=".txt";
        char pathfile[16];
        int dati[10000];
        int i;
        cout << "Anno?"<< endl;
        cin >> a;
        cout << "Mese?" << endl;
        cin >> m;
        strcpy(pathfile,m); // copio in pathfile la prima stringa e concateno le altre..
        strcat(pathfile,a);
        strcat(pathfile,sufffile);
        fstream leggidafile(pathfile,ios::in);
        if(!leggidafile) cout << "errore nella lettura";
        for(int i=0;i<10000;i++)
        {
            leggidafile >> dati[i]; //leggo da file e metto tutto in un array oppure uso while(leggidafile.get(dati[i])) se si tratta di soli char
            ;
        }
        sottoseq(dati,10000);
    
    
    
    
        return 0;
    }
    c'è qualcosa che non torna quando richiamo la funzione sottoseq per ultima..torna sempre 0..eppure funzione, funziona(scusate il gioco di parole) ^^

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quindi utilizzi

    leggidafile >> dati[i];

    ma dati è di tipo char mentre ti servono degli interi ...

    int dati[10000];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    si scusami..ho dichiarato un array di interi sia nella funzione che nel main, ma in ogni caso restituisce sempre 0;
    forse è sbagliata la disposizione dei dati nel file di testo?sono messi giù così:
    1
    2
    3
    4
    5
    ecc

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai dimenticato lo spazio per il terminatore nelle stringhe. Deve essere

    char a[5];
    char m[9];

    char pathfile[17];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.