Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2017
    Messaggi
    9

    [C++] Problema con getchar(): non stampa il secondo carattere

    Salve ragazzi, buonasera, sono un ex studente di informatica. a scuola ho imparato ad usare il c++, correva l'anno 2000-2003....poi un'anno di università e ho dovuto lasciare.....
    adesso su consiglio di un amico ho voluto riprendere in mano la programmazione e mi consigliava di imparare il php. vedendo sul sito ho trovato che aveva delle somiglianze con il c, per cui o installato il dev c++ e ho provato a fare qualche programmino.

    sto avendo delle difficolta con il getchar.... vi mostro un esempio di codice:

    #include <iostream>
    #include <stdio.h>
    #include <conio.h>


    using namespace std;




    int main()
    {
    int i;
    char c;

    cout<<"Acquisizione dieci caratteri"<<endl;

    for(i=0;i<10;i++)
    {
    cout<<i+1<<"o carattere:";
    c=getchar();
    printf("hai inserito %c",c);
    cout<<endl;
    }
    return 0;
    }

    cosa succede? inserisco il primo carattere e premo invio, me lo stampa a video e poi mi stampa anche il secondo, ovviamente vuoto e mi fa inserire solamente il terzo carattere.... da come ho capito mi legge l'invio del primo carattere come secondo carattere.... ho sbagliato qualcosa?

    vi ringrazio anticipatamente

  2. #2
    shala84
    for(i=0;i<10;i++)
    {
    cout<<i+1<<"o carattere:";
    c=getchar();
    printf("hai inserito %c",c);
    cout<<endl;
    }

    Prova ad utilizzare la funzione fflush per lo stream in questo modo:
    codice:
    cout<<"\n\n"<<i+1<<"o carattere: ";
    c=getchar();
    fflush(stdin); //serve a svuotare il buffer dello standard di input(stdin)
    cout<<"\nHAI INSERITO: "<<c;
    Ti serve perchè devi svuotare il buffer, altrimenti il programma salta l'operazione immediatamente successiva e ti fa iniziare a riscrivere tipo dal 3° carattere in poi! Poi al 4° perchè il buffer non è svuotato salta e ti fa scrivere solo al 5° e così via...!!
    Ultima modifica di AmedeoFalco; 17-10-2017 a 20:25

  3. #3
    Anche se però io ti consiglierei un altro modo per memorizzare i caratteri scritti !!! Sto parlando di vettori stringa...la funzione getchar() risulta essere meno adatta allo scopo, va!!!

    TIPO:

    codice:
    char c[10];
    
    
    cout<<"Acquisizione dieci caratteri"<<endl;
    
    
    for(i=0;i<10;i++)
    {
    cout<<i+1<<"o carattere: ";
    cin>>c[i];
    
    
    }
    for(int i=0;i<10;i++){
    	cout<<"\nHAI INSERITO: "<<c[i];
    
    
    }
    Ultima modifica di AmedeoFalco; 17-10-2017 a 20:32

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2017
    Messaggi
    9
    grazie, proverò subito.
    ho voluto fare questa prova di codice poichè avevo creato un programmino per le operazioni elementari tra numeri interi e alla fine, per tornare alla scelta iniziale, avevo messo una domanda di controllo dove si doveva rispondere s/n e me la saltava ogni volta.... potrei mettere la pulizia del buffer prima della domanda... ti aggiornerò!


    edit:

    adesso funziona, anche con il secondo problema ^^ grazie!
    Ultima modifica di shala84; 19-10-2017 a 16:42

  5. #5
    Quote Originariamente inviata da shala84 Visualizza il messaggio
    grazie, proverò subito.
    ho voluto fare questa prova di codice poichè avevo creato un programmino per le operazioni elementari tra numeri interi e alla fine, per tornare alla scelta iniziale, avevo messo una domanda di controllo dove si doveva rispondere s/n e me la saltava ogni volta.... potrei mettere la pulizia del buffer prima della domanda... ti aggiornerò!


    edit:

    adesso funziona, anche con il secondo problema ^^ grazie!
    Mi fa piacere che il problema (nascosto) si sia risolto prendendo spunto da questo di "problema"!!

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.