Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    390

    cin.getline sballato

    ho 1 problema enorme. mi spiego:
    se uso prima il cin e poi il cin.getline quando immetto qualcosa cn il cin, poi il primo cin.getline nn me lo fa immettere...me lo salta
    stessa cosa accade quando nel cin.getline sforo d dimensione.

    cioè..s.e ho 1 blocco del tipo

    cin>>n;

    for (i=0;i<n;i++){
    cout"\nimmetti "<<i;
    cin.getline(stringa[i],50);}

    digito n,premo invio e mi compare:

    immetti 1
    immetti 2

    quindi il primo cin.getline me lo salta. come devo risovere sto problema???????
    Date a Cesare quel che è di Cesare,
    tutto il resto a me!!

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Penso che dipenda dal fatto che quando leggi con

    cin >> n;

    il carattere di "a capo" che segue il numero inserito non viene elimimato dallo standard input, quindi con la successiva lettura con getLine() si ha subito un carattere di fine linea, per cui è come se avessi immesso una riga vuota, e si passa all'iterazione successiva; per questo quando leggi singoli caratteri o numeri con cin, svuota il buffer dello standard input con l'istruzione:

    fflush(stdin);

    per utillizzarla includi cstdio:

    #include<cstdio>

    fflush è una funzione di i/o della libreria standard del C, non ho trovato la corrispondente in c++; quindi il tuo codice dovrebbe essere:

    cin>>n;
    //svuoto il buffer
    fflush(stdin);
    for (int i=0;i<n;i++){
    cout<<"\nimmetti "<<i;
    cin.getline(stringa[i],50);}
    }

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Si con la fflush dovrebbe andare,un problema analogo lo da anche la scanf in C.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    ...linguaggio utilizzato sempre bello in mostra (soprattutto nei titoli)
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    390
    e xkè mi dà lo stesso problema quando sforo cn il getline?
    Date a Cesare quel che è di Cesare,
    tutto il resto a me!!

  6. #6
    Approfitto di questo topic per porre anche io una domanda...

    perchè quando uso questo codice il cout non mi funziona (ecco il codice)

    while(!cin.eof())
    cin.getline(temp,maxele-1);

    cout<<temp;



    Mentre quando uso quest'altro mi funziona(ecco il codice)

    while(!cin.eof())
    cin>>temp;

    cout<<temp;


    ?????????

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    che significa no funziona???

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    se stai usando il C++, per leggere una stringa potresti utilizzare la classe string:

    codice:
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main() {
    string s;
    cin >> s;
    cout << s;
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  9. #9
    Originariamente inviato da Elninno
    Approfitto di questo topic per porre anche io una domanda...

    perchè quando uso questo codice il cout non mi funziona (ecco il codice)

    while(!cin.eof())
    cin.getline(temp,maxele-1);

    cout<<temp;



    Mentre quando uso quest'altro mi funziona(ecco il codice)

    while(!cin.eof())
    cin>>temp;

    cout<<temp;


    ?????????
    tutto a posto ho risolto....per quanto riguarda le classi ancora non so cosa esse siano :P!

  10. #10
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Io ho ancora problemi con sto maledetto getline!

    Ecco il codice:

    Codice PHP:
    string exprchar buf[1000];
    do {
        
    // INPUT ESPRESSIONE
            
    cout << "Scrivi l'espressione:" << endl;
            
    fflush(stdin);
            
    cin.getline(buf1000'\n');
                    
    fflush(stdin);
            
    expr buf;
    // qui fa tutti i calcoli che deve...
        // PROSSIMA
            
    cout << "Un'altra espressione (s/n) ?"cin >> continua;
        } while(
    toupper(continua)=='S'); 
    La prima volta va bene, ma se rispondo "s", non mi chiede più niente e va avanti con una stringa nulla!!
    I've got a bike. You can ride it if you like.

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.