Warten auf Benutzereingaben in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Methode cin.get(), um auf Benutzereingaben zu warten
  2. Verwenden Sie die Funktion getchar, um auf Benutzereingaben zu warten
  3. Verwenden Sie die Funktion getc, um auf Benutzereingaben zu warten
  4. Vermeiden Sie die Verwendung von system("pause"), um auf Benutzereingaben zu warten
Warten auf Benutzereingaben in C++

In diesem Artikel werden C++-Methoden vorgestellt, die auf Benutzereingaben warten. Beachten Sie, dass das folgende Tutorial davon ausgeht, dass der Inhalt der Benutzereingaben für die Programmausführung irrelevant ist.

Verwenden Sie die Methode cin.get(), um auf Benutzereingaben zu warten

get() ist eine std:cin Memberfunktion, die fast wie ein >> Eingabeoperator arbeitet, der Zeichen aus dem Stream extrahiert. In diesem Fall, wenn wir nicht an der Verarbeitung der Benutzereingabe interessiert sind und nur eine Wartefunktion implementieren müssen, können wir die get-Funktion ohne Argumente aufrufen. Beachten Sie jedoch, daß diese Funktion zurückkehrt, wenn die Eingabetaste gedrückt wird.

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  flag = cin.get();

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

w; x; y; z;
Done !

Verwenden Sie die Funktion getchar, um auf Benutzereingaben zu warten

Die Funktion getchar ist die C-Standardbibliotheksfunktion zum Lesen eines einzelnen Zeichens aus dem Eingabestrom (stdin). Wie die vorherige erwartet auch diese Methode die Rückkehr eines Zeichens für eine neue Zeile (d.h. das Drücken der Eingabetaste). getchar gibt eof zurück, wenn ein Fehler auftritt oder wenn das Ende des Streams erreicht ist.

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  flag = getchar();

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

Verwenden Sie die Funktion getc, um auf Benutzereingaben zu warten

Als Alternative könnten wir das obige Beispiel durch die getc-Funktion ersetzen. getc wird mit dem Argument DATEI *Strom übergeben, um aus einem beliebigen Eingabestrom zu lesen, aber in diesem Fall übergeben wir stdin, das ein Standard-Eingabestrom ist, der üblicherweise mit der Terminal-Eingabe assoziiert wird. Diese Funktion kehrt auch zurück, wenn die Eingabetaste gedrückt wird.

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  flag = getchar();

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

Vermeiden Sie die Verwendung von system("pause"), um auf Benutzereingaben zu warten

Die Funktion system wird verwendet, um Shell-Befehle auszuführen, und der Name des Befehls wird als String-Literal übergeben. Wenn also eine pause als Argument übergeben wird, versucht sie, den entsprechenden Befehl auszuführen, der nur auf Windows-Plattformen verfügbar ist. Es ist besser, eine benutzerdefinierte Wartefunktion mit den oben aufgeführten Methoden zu implementieren, als eine nicht portierbare Art der System("Pause") zu verwenden.

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  system("pause");

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

sh: 1: pause: not found
w; x; y; z;
Done !
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook