Domanda

Mi chiedevo come usare cin in modo tale che se l'utente non inserisce alcun valore e spinge semplicemente ENTER che cin riconoscerà questo come input valido.

È stato utile?

Soluzione

Probabilmente vorrai provare std :: getline :

#include <iostream>
#include <string>

std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...

Altri suggerimenti

Trovo che per l'input dell'utente std :: getline funziona molto bene.

Puoi usarlo per leggere una riga e scartare ciò che legge.

Il problema di fare cose del genere,

// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;

std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?

è che se l'utente immette altri rifiuti, ad es. " 4.5 - circa " è fin troppo facile uscire dalla sincronizzazione e leggere ciò che l'utente ha scritto l'ultima volta prima di stampare il messaggio che deve vedere la volta successiva.

Se leggi ogni riga completa con std :: getline (std :: cin, a_string) e poi analizzi la stringa restituita (ad es. usando un istringstream o altra tecnica) è molto più facile da mantenere le istruzioni stampate sono sincronizzate con la lettura di std :: cin, anche a fronte di input confusi.

cin. getline risolve il tuo problema?

Per rilevare l'utente premendo il tasto Invio anziché inserire un numero intero:

char c;
int num;

cin.get(c);               // get a single character
if (c == 10) return 0;    // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c);      // else put the character back
cin >> num;               // get user input as expected

In alternativa:

char c;
int num;
c = cin.peek();           // read next character without extracting it
if (c == '\n') return 0;  // linefeed (Enter Key) so exit
cin >> num;               // get user input as expected

Prova a non bufferizzare cin (è bufferizzato per impostazione predefinita).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top