PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ klappt nicht


Gast
2009-02-14, 00:05:09
Hallo,
da ich C nun sehr gut kann will ich jetzt auch C++ lernen

bei diesem Code:


#include <iostream>
using namespace std;
main() {
int eingebel;
cin >> eingebel;
cout << "\nEingabe war: ";
cout << eingebel;
}


Wenn ich da eine Zahl eingebe, funktioniert es, aber wenn ich Buchstaben eingebe, kommt immer 0 raus, woran liegt das? Was mache ich falsch?

MfG

Marscel
2009-02-14, 00:10:07
Du hast keine Ahnung von C.

Gast
2009-02-14, 00:13:06
muss es nicht fürn standard int main(void) heissen?
und wie willst du in einem integer einen CHAR speichern?

Gnafoo
2009-02-14, 00:27:21
Du kannst keine Zeichenkette in einem Integer speichern. Um das abzufangen, musst du nach der Eingabe cin.fail() prüfen. Siehe z. B.:


#include <iostream>
#include <limits>
using namespace std;

int main(int argc, char* argv[])
{
int num;
cin >> num;

if (cin.fail())
{
cout << "Ungültige Eingabe!" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else
{
cout << "Ihre Eingabe war: ";
cout << num << endl;
}

return 0;
}


Was nach bei einem Fehler passiert: der Fehlerstatus wird mit dem clear() wieder zurückgesetzt. Allerdings wurden die Buchstaben, die jetzt im Input-Stream stehen, noch nicht vom Stream entfernt, d.h. das nächste lesen von cin würde dir den selben Fehler bescheren. Daher die zweite Zeile mit dem ignore. Diese schmeißt alles im Stream bis zum nächsten newline (das Return nach der Eingabe) weg.

The_Invisible
2009-02-14, 07:30:40
troll?

mfg

Gast
2009-02-14, 21:38:59
Du kannst keine Zeichenkette in einem Integer speichern. Um das abzufangen, musst du nach der Eingabe cin.fail() prüfen. Siehe z. B.:


#include <iostream>
#include <limits>
using namespace std;

int main(int argc, char* argv[])
{
int num;
cin >> num;

if (cin.fail())
{
cout << "Ungültige Eingabe!" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else
{
cout << "Ihre Eingabe war: ";
cout << num << endl;
}

return 0;
}


Was nach bei einem Fehler passiert: der Fehlerstatus wird mit dem clear() wieder zurückgesetzt. Allerdings wurden die Buchstaben, die jetzt im Input-Stream stehen, noch nicht vom Stream entfernt, d.h. das nächste lesen von cin würde dir den selben Fehler bescheren. Daher die zweite Zeile mit dem ignore. Diese schmeißt alles im Stream bis zum nächsten newline (das Return nach der Eingabe) weg.
Danke für die ausführliche Antwort, jetzt weiß ich wie ich es zu machen habe :)

Da mir die Dateitypen sowieso schon immer zu "theoretisch" waren, habe ich das vergessen. War auch von Java verirrt, denn dort scheint char eine andere Bedeutung als in C/C++ zu haben.

MfG

instinct
2009-02-14, 21:43:54
Danke für die ausführliche Antwort, jetzt weiß ich wie ich es zu machen habe :)

Da mir die Dateitypen sowieso schon immer zu "theoretisch" waren, habe ich das vergessen. War auch von Java verirrt, denn dort scheint char eine andere Bedeutung als in C/C++ zu haben.

MfG

Also eine andere Bedeutung würde ich nicht sagen. In Java ist ein char 16Bit lang. In C/C++ kommt es auf die Hardware/Compiler an, in der Regel aber 8Bit.

Gast
2009-02-14, 23:54:56
Ich glaub ich werd nicht mehr :(

char speichert bei mir immer nur den ersten Buchstaben. Mit welchen Datentyp kann ich jetzt also eine Zeichenkette speichern? Ich finde keinen passenden dafür in meiner Tabelle^^

please help ^^

MfG

Monger
2009-02-15, 00:11:49
So, genug gelacht. Wenn dieser Thread ein Scherz sein sollte, war es kein besonders gelungener.

Monger