Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C++] Probela sul cin

  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    [C++] Probela sul cin

    Ciao a tutti!

    Avrei un piccolo broblema sul cin di un esercizio tratto dal libro di Lippman.

    Tale esercizio propone una nuova implementazione della classe String.

    Dato l'istream della classe così fatto:

    inline istream& operator>>( istream &io, String &s )
    {
    const int limit_string_size = 4096;
    char inBuf[ limit_string_size];

    io >> inBuf;

    s = inBuf;
    return io;
    }

    e, dato il seguente codice nel main:

    int counter;
    String buf;
    while(cin >> buf)
    ++counter;

    cout << counter << endl

    Quando vado ad eseguire il programma e inserisco un pezzo di testo e premo invio, non termina l'esecuzione del while, posso premere invio all'infinito senza che il programma termini, qualcuno sa quindi come poter far capire al programma che l'invio equivale a EOF?

    Grazie mille a tutti

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Quella funzione restituisce lo stream quindi non puoi aspettarti che restituisca 0 se qualcuno perme invio!
    Puoi fare qualcosa tipo che, dentro la funzione estrattore, impost un flag quando la lunghezza della stringa è 0!

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Uhm.. while(cin >> buf) significa:

    Fino a che è stato inserito qualcosa nel buffer di sistema inseriscilo nella variabile "String buf"

    quindi appena non c'è piu nel buffer (ovvero EOF) termina...
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    EOF non è 0 ma -1 credo!

  5. #5
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Si è uguale, il while cicla solo se la condizione è > di 0
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    No!
    Un ciclo while termina solo se la condizione è = a 0!

    E comunque, siccome la funzione operator restituisce lo stream, credo che il ciclo termini "quando lo stream è = a 0, quindi non esiste più", quindi mai (sempre credo... )

  7. #7
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Bha..il ciclo funziona ok, però non termina cioè non riconosce l'EOF
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

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 © 2024 vBulletin Solutions, Inc. All rights reserved.