Eingabe beendet ungewollt Programm

Hallo,
Ja. Mein Code solltest du innerhalb der if Abfrage schreiben:
C++:
if((cin >> eingabe) == false)
{
  if (!cin.bad() && !cin.eof())
  {  
    std::cin.clear();
    std::cerr << "Falsche Eingabe!" << std::endl;
  }
}
Gruß

PS: Wenn das Programm trotzdem beendet wird, obwohl du den Stream an dieser Stelle zurücksetzt, dann zeig deinen restlichen Code.

mal so ne Frage nebenbei: Sollte es nicht reichen wenn man das mit cin.fail() überprüft bzw würde das genauso funktionieren?

Gruß,
RedWing
 
Also hier der gewünschte Code:

Code:
...
int zahl = 0;
if(!(cin >> zahl))
{
      cin.clear();
      cerr << "Falsche Eingabe!" << endl;
}
else
{
      cout << "Richtige Eingabe!" << endl;
}
...
 
Soll das alles sein?

Hattest du nicht gesagt, dass "noch haufenweise
Anweisungen folgen würden"? Wo sind denn diese Anweisungen hin?

Gruß
 
Hi,
Ich weiss ja nicht ob es wirklich zur Lösung des Problems führt. Allerdings versuchst Du Werte wie "h3g42" in einen Integer einzulesen. Dieser kann doch aber nur Zahlen aufnehmen. Besteht mit einem std:: string das Problem weiterhin?

Gruß,
rAdaZong
 
Bitte schön:

Code:
/* Primzahlenzerlegung */

#include <cstdio>
#include <iostream>
#include <windows.h>
using namespace std;

#define MAX 10000

void main() {
	SetConsoleTitle(TEXT("Primzahlenzerlegung mit C++"));
	register unsigned long zahl, ersatz;
	register unsigned int z = 0;
	register long ergebnis[MAX];
	register long a, j = 2;

	cout << "--- Primzahlenzerlegung ---\n" << endl;

	for(;;) {

		cout << "Bitte eine Ganzzahl gr\224sser 1 eingeben: ";
		cin >> zahl;		
		// Hier soll eben die Überprüfung der Eingabe stehen

		if(zahl == 0) //->Programm mit 0 beenden
			break;

		ersatz = zahl;

		do {
			a = ersatz % j;

			if(a == 0) {
				ergebnis[z] = j;
				ersatz /= j;
				++z;
			} else {
				++j;
			}
		} while(ersatz != 1);
		
		cout << "Zerlegt:" << endl;
		for(register unsigned int i = 0; i < z; i++) {
			if(i == (z-1)) 
			{
				printf("%d\n", ergebnis[i]);
			}
			else
			{
				printf("%d*\n",ergebnis[i]);
			}
		}

		z = 0;
		j = 2;
		printf("-----------------------\n\n");
	}
}
 
Also ich hab nun 2 Möglichkeiten gefunden:

1.: Über das gute alte C

Code:
...
int eingabe, check;
printf("Geben Sie bitte eine Ganzzahl ein: ");
check = scanf_s("%d", &eingabe);
fflush(stdin);
if(check == 1)
{
       printf("Richtige Eingabe! Diese war: %d\n", eingabe);
}
else
{
       printf("Fasche Eingabe! \n");
}
...

oder über einen stringstream:

Code:
...
int zahl = 0;
string text = "";
cout << "Bitte Zahl eingeben: ";
cin >> text;
cin.sync();
cin.clear();
stringstream ss(text);
ss >> zahl;
if(ss.fail())
{
       cout << "Falsche Eingabe!" << endl;
}
cout << "Ihre Eingabe lautete: " << zahl;
...

Falls jemand von euch rausfindet, wie ich es über cin direkt machen könnte, wär ich euch sehr dankbar!
 
Ok, hab auch das gelöst:

Code:
#include <iostream>
#include <windows.h>
using namespace std;

void main()
{
	SetConsoleTitle(TEXT("Eingabeprüfung C++"));
	int zahl = 0;
	cout << "Geben Sie bitte eine Ganzzahl ein: ";
	cin >> zahl;
	cin.sync();
	if(cin.fail())
	{
		cin.clear();
		cout << "Falsche Eingabe!" << endl;
	}
	else
	{
		cout << "Richtige Eingabe!" << endl;
	}
	cout << "Ihre Eingabe lautete: " << zahl << endl;
	cin.get();
}

Dennoch danke für eure Hilfe
 
Zurück