Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C++] Input da tastiera, accettare subito il valore

    Che cosa devo scrivere per accettare subito l'input da tastiera?

    Se scrivo

    cout << scelta;

    Mi fa inserire la mia scelta ma devo digitare invio, per non farlo premere che devo scrivere?

  2. #2
    Credo che comunque devi dire al sistema QUANDO prelevare la tua stringa, non ti sembra?

  3. #3
    Utente bannato
    Registrato dal
    Apr 2002
    Messaggi
    546
    devi catturae la pressione del tasto.............. e poi fai quello che vuoi~

    fai un ciclo tipo...............

    do
    {

    option = _getch(); //questo è il codice tasto premuto

    switch(option)
    {
    case 49: //ASCII codice il menu 1
    funct1(); //chiama funct1()
    break;

    case 50: //ASCII codice il menu 2
    funct2(); //chiama funct2()
    break;

    case 51: //ASCII codice il menu 3
    funct3(); //chiama funct2()
    break;

    }


    }
    ---------------------------------

  4. #4
    Non mi avete capito....

    Ecco il listato.

    #include <stdio.h>
    #include <fstream.h>
    #include <iomanip.h>

    double nome;
    char c;
    int scelta;
    void inserisci_contatto(void);
    void sfoglia_rubrica(void);
    void uscita(void);

    main()
    {
    cout << "\n*** Rubrica Telefonica ***\n";
    cout << "1. Inserisci un nuovo contatto\n";
    cout << "2. Sfoglia la rubrica\n";
    cout << "3. Uscita\n";
    cout << "\n\n Inserisci la tua selezione....";
    cin >> scelta;
    switch (scelta)
    {
    case 1:
    inserisci_contatto();
    break;
    case 2:
    sfoglia_rubrica();
    break;
    case 3:
    uscita();
    break;
    default:
    cout << "Errore, input errato: uscita dal programma";
    }
    }

    void inserisci_contatto(void)
    {
    cout << "\n\n" << "Inserimento nuovo contatto\n";
    cout << "\nInserisci il cognome dell'utente..";
    while((nome = cin.get()) != \n')
    {
    fstream rubrica_w("c:/rubrica.txt",ios::app);
    rubrica_w.put(nome);
    rubrica_w.close();
    }
    cout << "Ho finito di memorizzare il cognome dell'utente" << endl;

    cout << "\nInserisci il nome dell'utente" << endl;
    cout << "\nInserisci il numero dell'utente" << endl;
    }

    void sfoglia_rubrica(void)
    {
    cout << "\n\n Grazie per aver utilizzato questa rubrica telefonica";
    }

    void uscita(void)
    {
    cout << "\n\n Grazie per aver utilizzato questa rubrica telefonica";
    cout << "\n Copyright Marco Nuke76 Brainforce" << endl;
    }

    Purtroppo al momento dell'input della scelta bisogna premere 1 o2 e di seguito invio per confermare, beh quell'invio mi sta rompendo le palle letteralmente perche rimane in memoria e al momento del richiamo della funzione inserisci_nuovo_utente rimane nel buffer e mi esce dal while dato che nome lo dichiarato != da "\n".

    Mi serve sapere come fare ad accettare l'input di 1 solo carattere senza confermare con l'invio.

  5. #5
    Utente bannato
    Registrato dal
    Apr 2002
    Messaggi
    546
    La risposta che ti ho dato è perfetta per il tuo codice...........
    ovvero utilizzare il ciclo do..............

    se ti scarichi il progetto....... capirai!!

    e comunque ci sono altri modi per ovviare al problema dell'invio

  6. #6
    Nonostante fossi un pò scettico lo provato, ma come ipotizzavo non cambia nulla.

    O prima o dopo esce sempre dal loop.

    Perche' prende come input lo '\n' e quando arriva al while del (do-while) in fondo al listato esce.

    Risultato continua a non immagazzinarmi il nome.

  7. #7
    Utente bannato
    Registrato dal
    Apr 2002
    Messaggi
    546
    l'algoritmo è impostato male..................
    il while lo devi utilizzare per il menu e basta, digitando 1 o 2 del menu vai a chiamare la routine specifica per poi tornare con return al menu:



    void inserisci_contatto(void)
    {
    cout << "\n\n" << "Inserimento nuovo contatto\n";
    cout << "\nInserisci il cognome dell'utente..";
    cin >> nome; //fai quello che vuoi, registri ecc,ecc


    // questa sotto non va bene
    //while((nome = cin.get()) != \n')
    return; // torni al main
    {

  8. #8
    l'algoritmo è impostato male..................
    No invece stà bene,
    problema risolto, come già capitato a volte il gets non lo prende
    bastava aggiungere un gets in più e gira....

    Grazie lo stesso comunque..

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.