Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    0

    [C++] errore strano con stringhe

    Ho un problema con una funzione che legge delle stringhe da un file e ne stampa i primi 10 caratteri di ognuna sullo standard output:

    Void Visualizza()
    {
    ifstream source ("..../archivio.txt");
    char aa;
    char *c = "";
    while (source.get(aa)){
    c = &aa;
    for(int i=0;i < 11;i++){
    cout << ("&c",(*(c+i)));
    }
    cout << endl;
    }
    }

  2. #2
    ciao, innanzi tutto Void, senza maiuscola, ma comunque prova cosi':
    codice:
    void Visualizza()
    {
     char *buffer[10];
     ifstream source("../file.txt");
     source.get(buffer, 10); /* Legge 10 caratteri e li mette nel buffer */
     for (int i = 0; i <  10; i++)
      cout << buffer[i];
    }
    
    se funziona bene, altrimenti fai cosi:
    void Visualizza()
    {
     ifstream source("../file.txt");
     for (int i = 0; i < 10; i++)
     {
       char c;
       source.get(c);
       cout << c;
     } 
    }
    dovrebbe andare, ma credo che nn faccia quello che vuoi. Questo legge i primi 10 caratteri del file. Se vuoi uno che legge i primi 10 di ogni stringa, fai cosi (supponendo che le stringhe siano lunghe + 10, altrimenti da un errore logico)
    codice:
    while(!source.eof())
    {
     source.get(c);
     if (c == ' ')
      for (int i = 0; i < 10; i++)
       cout << cource.get(c);
    }
    credo che possa andare bene...
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    0
    Niente da fare...

    Con il primo esempio da errore alla riga "source.get(buffer, 10);" il compilatore da errore
    Con il secondo, come avevi anche indicato, legge solo i primi 10 caratteri del file.
    Con il ternzo invece non da nessun errore ma non fa nulla.

    Io ho fatto un mix tra i vari codici:

    void Visualizza()
    {
    ifstream source ("..../archivio.txt");
    while(!source.eof()){
    for (int i = 0; i < 10; i++){
    char c;
    source.get(c);
    cout << c;
    }
    cout << endl;
    }
    }
    ___________________________
    Risualtato? Ora visualizza i caratteri come sono nel file originale (non più asterischi, picche, ecc) e va a capo dopo i primi 10 caratteri; però quando va a capo non inizia con la riga successiva ma con i secondi 10 caratteri della stessa fino al suo terminamento.
    Perchè?:master:

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    0
    Fatto!:gren:

    Ho stravolto tutto!

    void visualizza()
    {
    string line;
    ifstream source (".../archivio.txt");
    while(!source.eof()){
    for (int i = o; i < 10; i++){
    getline(source,line,'\n');
    string riga(line,0,10);
    cout << riga << endl;
    }
    }
    }
    ___________________________________
    Ora funziona!!!!
    Grazie 1000 lo stesso.

  5. #5
    °_° strano che nn accetti .get(buffer, n), e' un prototipo tra i tanti della versione get...
    e che per dirla tutta, e' uguale a get(buff, nchar, delimiter) solo che non usa delimiter...
    bho
    e il tuo metodo e' molto carino e semplice, ma implica che ogni stringa sia su una riga diversa, mentre, magari, sono separate da caratteri speciali
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.