Krautkanal.com

Veröffentlicht am 2016-10-27 19:46:54 in /prog/

/prog/ 9369: Berdi, bitte nicht lachen. Mache gerade meine ersten Ge...

nerrsoft Avatar
nerrsoft:#9369

Berdi, bitte nicht lachen. Mache gerade meine ersten Gehversuche in C++ seit ca. 10 Jahren. Habe mich an einem simplen "Rechner" versucht:

int main()
{
int a, b;
cout << "Wert 1 eingeben\n";
cin >> a;
cout << "Wert 2 eingeben\n";
cin >> b;
int sum;
sum = a + b;
cout << "Die Summe von " << a << " und " << b << " ist " << sum;

return 0;
}

Hatte zuvor "sum" direkt nach "a" und "b"... eingeführt und den Wert "a + b" zugeordnet. Das lief, warf aber mal mehrstellige positive als auch negative Zahlen aus. Rein für's Verständnis würde mich interessieren, wieso das so ist. Ich vermute, dass es daran liegt, dass "a" und "b" noch kein Wert zugeordnet war. Bitte kläre mich auf.

Auch: Was kann ich in Sachen Übersichtlichkeit und Prägnanz an diesem Kothäufchen verbessern (ausgenommen Kommentare)?

areus Avatar
areus:#9371

>Ich vermute, dass es daran liegt, dass "a" und "b" noch kein Wert zugeordnet war.
Ja.
>Auch: Was kann ich in Sachen Übersichtlichkeit und Prägnanz an diesem Kothäufchen verbessern (ausgenommen Kommentare)?
Nichts, ist bei so einem Trivialbeispiel nicht sinnvoll.

suprb Avatar
suprb:#9372

>>9369
Meine letzten Erfahrungen in C++ liegen zwar ein Paar Jahre zurück, aber dennoch:
>Hatte zuvor "sum" direkt nach "a" und "b"... eingeführt und den Wert "a + b" zugeordnet. Das lief, warf aber mal mehrstellige positive als auch negative Zahlen aus.

Wie jetzt? Du hattest int a,b; int sum = a + b; stehen?
Das kann natürlich nicht funktionieren, weil a und b niemals initialisiert worden sind und irgendwelchen zufälligen Speichermüll enthalten. Einen Wert bekommen diese ja erst durch cin, wie du selbst erkannt hast. Daher macht a+b erst nach deren Initialisierung sind.

Ansonsten ist dieses Programm zu wenig, um da viel auf einen möglichen Programmierstil zu schließen. Sachen die mir da spontan auffallen:

- du musst nicht int sum; sum = a + b; schreiben, du kannst auch einfach int sum = a + b; schreiben
- die Eingabe, die über cin erfolgt, sollte validiert werden. Der Nutzer kann ja sonst was eingeben.
- da cin und cout kein std:: vorm Namen haben, schließe ich, dass du den namespace eingebunden hast. Soviel ich mich erinnere gilt das eher als uncool, weil du deinen aktuellen Namespace mit dem kompletten std-Inhalt verschmutzt. Bernd wird mich sicherlich feierlich korrigieren, wenn ich Unsinn rede.

Ansonsten musst du schon mehr liefern, wenn du eine Einschätzung brauchst.

kimcool Avatar
kimcool:#9374

Ach OP, lad dir doch Qt oder eine andere GUI-library, ein zwei Tutorials und bau einen Taschenrechner mit GUI. Da hast du mehr von, als von solchem Konsolengefrickel.

Siehe z.B. http://doc.qt.io/qt-5/qtexamplesandtutorials.html

abdots Avatar
abdots:#9406

>>9369
Auch: Flieskomma kennste?

aadesh Avatar
aadesh:#9428

int a, b, sum;
cin >> a;
cin >> b;
sum = a+b;
cout << sum;

dürfte ebenso funktionieren.

pehamondello Avatar
pehamondello:#9439

C++ ist toll OP

Weitermachen

joshuapekera Avatar
joshuapekera:#9443

>>9374
Ich weiß nicht warum, ich will ausgerechnet dir unter die Nase reiben, dass a+b=sum nicht funktioniert.

vovkasolovev Avatar
vovkasolovev:#9444

mit python wäre dir so ein schieß nicht passiert.

greenbes Avatar
greenbes:#9450

>>9374
Danke. Werde ich machen.

>>9439
Ich hoffe, dass das ohne Ironie war. :3

>>9372
Danke für die ausführliche Antwort.

>die Eingabe, die über cin erfolgt, sollte validiert werden. Der Nutzer kann ja sonst was eingeben

Wie macht man das? Wenn du zu faul bist, kein Problem. Da stolpere ich sicherlich noch drüber.

>da cin und cout kein std:: vorm Namen haben, schließe ich, dass du den namespace eingebunden hast. Soviel ich mich erinnere gilt das eher als uncool, weil du deinen aktuellen Namespace mit dem kompletten std-Inhalt verschmutzt. Bernd wird mich sicherlich feierlich korrigieren, wenn ich Unsinn rede.

Ist notiert. Und ja, deine Vermutug war richtig.

>Wie jetzt? Du hattest int a,b; int sum = a + b; stehen?
Das kann natürlich nicht funktionieren, weil a und b niemals initialisiert worden sind und irgendwelchen zufälligen Speichermüll enthalten. Einen Wert bekommen diese ja erst durch cin, wie du selbst erkannt hast. Daher macht a+b erst nach deren Initialisierung sind.

Bin davon ausgegangen, dass es kein Problem ist, wenn das ohne Wert definiert wird. Aber so macht das natürlich auch Sinn.