Wie kann ein Programm in C++ angehalten werden

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion getc(), um das Programm zu pausieren
  2. Verwenden Sie die Methode std::cin::get(), um das Programm anzuhalten
  3. Verwenden Sie die Funktion getchar(), um das Programm anzuhalten
Wie kann ein Programm in C++ angehalten werden

In diesem Artikel werden verschiedene Methoden erläutert, wie ein Programm in C++ angehalten werden kann.

Verwenden Sie die Funktion getc(), um das Programm zu pausieren

Die Funktion getc() stammt aus der C-Standard-Eingabe-Ausgabe-Bibliothek, und sie liest das nächste Zeichen aus dem gegebenen Eingabestrom. Der Eingabestrom ist vom Typ FILE*, und die Funktion erwartet, dass der Strom geöffnet wird. Auf fast allen Unix-Systemen werden während des Programmstarts 3 Standarddateistreams geöffnet - nämlich stdin, stdout und stderr. Im folgenden Beispiel übergeben wir stdin als Argument, das einer Konsolen-Eingabe entspricht, um auf einen Benutzer zu warten, der die Programmausführung fortsetzt.

#include <chrono>
#include <iostream>
#include <thread>

using std::copy;
using std::cout;
using std::endl;
using std::this_thread::sleep_for;
using namespace std::chrono_literals;

int main() {
  int flag;
  cout << "Program is paused !\n"
       << "Press Enter to continue\n";

  // pause the program until user input
  flag = getc(stdin);

  cout << "\nContinuing .";
  sleep_for(300ms);
  cout << ".";
  cout << ".";
  cout << ".";
  cout << "\nProgram finished with success code!";

  return EXIT_SUCCESS;
}

Ausgabe:

Program is paused !
Press Enter to continue

Continuing ....
Program finished with success code!

Verwenden Sie die Methode std::cin::get(), um das Programm anzuhalten

Eine andere Methode, ein Programm anzuhalten, ist der Aufruf der in std::cin eingebauten Methode get, die Zeichen aus dem Eingabestrom extrahiert, wie durch Parameter angegeben. In diesem Fall lesen wir einfach ein einzelnes Zeichen und geben die Kontrolle an das ausführende Programm zurück.

#include <chrono>
#include <iostream>
#include <thread>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
using std::this_thread::sleep_for;
using namespace std::chrono_literals;

int main() {
  int flag;
  cout << "Program is paused !\n"
       << "Press Enter to continue\n";

  // pause the program until user input
  flag = cin.get();

  cout << "\nContinuing .";
  sleep_for(300ms);
  cout << ".";
  cout << ".";
  cout << ".";
  cout << "\nProgram finished with success code!";

  return EXIT_SUCCESS;
}

Verwenden Sie die Funktion getchar(), um das Programm anzuhalten

Als Alternative kann man die gleiche Funktionalität mit dem Funktionsaufruf getchar reimplementieren. getchar ist der äquivalente Aufruf zu getc(stdin), der das nächste Zeichen aus dem Eingabestrom der Konsole liest.

Beachten Sie, dass beide Funktionen EOF zurückgeben können, was anzeigt, dass das Ende der Datei erreicht ist, d.h. dass keine Zeichen zum Lesen verfügbar sind. Der Programmierer ist für die Behandlung jedes außergewöhnlichen Kontrollflusses und der zurückgegebenen Fehlercodes verantwortlich.

#include <chrono>
#include <iostream>
#include <thread>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
using std::this_thread::sleep_for;
using namespace std::chrono_literals;

int main() {
  int flag;
  cout << "Program is paused !\n"
       << "Press Enter to continue\n";

  // pause the program until user input
  flag = getchar();

  cout << "\nContinuing .";
  sleep_for(300ms);
  cout << ".";
  cout << ".";
  cout << ".";
  cout << "\nProgram finished with success code!";

  return EXIT_SUCCESS;
}
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