C++ - Beim Programm neustarten wird cin.get() übersprungen

Baker

Mitglied
Hallo,

wenn ich das Programm starte, dann werde ich aufgefordert Enter zu drücken und das klappt wunderbar. Aber wenn ich das Programm am Ende neu starte, dann wird cin.get() übersprungen, woran liegt das? VIelleicht am zuvor gedrückten Enter nachdem ich "j" eingebe oder hat das eine andere Ursache?

C++:
#include <stdio.h>
#include <iostream>

using namespace std;

int main(void) {

  double zahl1 = 0;
  double zahl2 = 0;
  double zahl3= 0;
  char neu = 'j';
 
  while (neu == 'j')
  {
 
  printf("Anleitung: \nSie werden aufgefordert drei Zahlen einzugeben."
            "\nDie ersten beiden Zahlen sind ein geschlossener Intervall,"
            "\nwährend die letzte Zahl, die zu überprüfende Zahl ist,"
            "\nob sie im Intervall liegt, oder nicht."
            "\n\nDrücken Sie Enter, um fortzufahren.");
 
  cin.get();
 
  printf("\nGeben sie die untere Grenze des Intervalls ein: ");
  scanf("%lf", &zahl1);
  printf("Geben sie die obere Grenze des Intervalls ein: ");
  scanf("%lf", &zahl2);
  printf("\nGeben sie die Prüfzahl ein: ");
  scanf("%lf", &zahl3);
 
if(zahl1 < zahl2){
  if(zahl1 <= zahl3 && zahl2 >= zahl3){
    printf("Die Zahl %lf liegt im Intervall [%lf, %lf]", zahl3, zahl1, zahl2);
  } else if(zahl1 > zahl3 || zahl2 < zahl3){
    printf("Die Zahl %lf liegt nicht im Intervall [%lf, %lf]", zahl3, zahl1, zahl2);
  }
} else {
if(zahl2 <= zahl3 && zahl1 >= zahl3){
    printf("Die Zahl %lf liegt im Intervall [%lf, %lf]", zahl3, zahl2, zahl1);
  } else if(zahl2 > zahl3 || zahl1 < zahl3){
    printf("Die Zahl %lf liegt nicht im Intervall [%lf, %lf]", zahl3, zahl2, zahl1);
  }
} do{
   cout << "\n\n------------------------------------------------------\n\n";
   cout << "Möchten Sie das Programm neustarten? [j/n]: ";
   cin >> neu;
} while (neu != 'j' &&neu != 'n');
 
  }
 return 0;
}
 

Baker

Mitglied
Ja, wahrscheinlich lag das daran, ich habe am Ende bevor das Programm neugestartet wird, nochmal ein cin.get() hinzugefügt und es klappte:

C++:
/*
 * Click nbfs://nbhost/Szahl2stemFileSzahl2stem/Templates/Licenses/license-default.tzahl1t to change this license
 * Click nbfs://nbhost/Szahl2stemFileSzahl2stem/Templates/cppFiles/main.cc to edit this template
 */

/*
 * File:   main.cpp
 * Author: baker
 *
 * Created on 20. Oktober 2021, 19:27
 */

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

using namespace std;

int main(void) {

  double zahl1 = 0;
  double zahl2 = 0;
  double zahl3= 0;
  char neu = 'j';
 
  while (neu == 'j') {
 
  printf("Anleitung: \nSie werden aufgefordert drei Zahlen einzugeben."
            "\nDie ersten beiden Zahlen sind ein geschlossener Intervall,"
            "\nwährend die letzte Zahl, die zu überprüfende Zahl ist,"
            "\nob sie im Intervall liegt, oder nicht."
            "\n\nDrücken Sie Enter, um fortzufahren.");
 
  cin.get();
 
  printf("\nGeben sie die untere Grenze des Intervalls ein: ");
  scanf("%lf", &zahl1);
  printf("Geben sie die obere Grenze des Intervalls ein: ");
  scanf("%lf", &zahl2);
  printf("\nGeben sie die Prüfzahl ein: ");
  scanf("%lf", &zahl3);
 
if(zahl1 < zahl2){
  if(zahl1 <= zahl3 && zahl2 >= zahl3){
    printf("Die Zahl %lf liegt im Intervall [%lf, %lf]", zahl3, zahl1, zahl2);
  } else if(zahl1 > zahl3 || zahl2 < zahl3){
    printf("Die Zahl %lf liegt nicht im Intervall [%lf, %lf]", zahl3, zahl1, zahl2);
  }
} else {
if(zahl2 <= zahl3 && zahl1 >= zahl3){
    printf("Die Zahl %lf liegt im Intervall [%lf, %lf]", zahl3, zahl2, zahl1);
  } else if(zahl2 > zahl3 || zahl1 < zahl3){
    printf("Die Zahl %lf liegt nicht im Intervall [%lf, %lf]", zahl3, zahl2, zahl1);
  }
} do {
   cout << "\n\n------------------------------------------------------\n\n";
   cout << "Möchten Sie das Programm neustarten? [j/n]: ";
   cin >> neu;
} while (neu != 'j' && neu != 'n'); printf("\n"); cin.get();
 
  }
 return 0;
}
 

Jw456

Top Contributor
Mit "cin >> neu" am ende wartest du auf eine Eingabe.
„Eingabe + Enter „ das Enter bleibt im Tastaturbuffer wird nicht vom Stream entfernt.
Bein nechten durchlauf ist das enter noch im Tastaturbuffer.

Teste am Anfang auch mit dem Stream
 

Ähnliche Java Themen

Neue Themen


Oben