Bjarne Stroustrup Einführung in die Prog... Problem
-
Im Buch Kapitel 3.4
// Einfaches Programm zum Ausprobieren von Operationen #include "../../std_lib_facilities.h" int main() { cout << "Geben Sie einen Gleitkommawert ein: "; double n; cin >> n; cout << "n == " << n << "\nn+1 == " << n+1 << "\ndreimal n == " << 3*n << "\nzweimal n == " << n+n << "\nn zum Quadrat == " << n*n << "\nHaelfte von n == " << n/2 << "\nWurzel von n == " << sqrt(n) << endl; // ein anderer Name für Zeilenumbruch ("end of line") }
Soll das Programm ändern, dass es einen int Wert anstelle eines double Wertes einliest. Sqrt() ist nicht für int Werte definiert. Also soll ich n einer double Variablen zu weisen und daraus die Quadratwurzel ziehen.
Meine Überlegung sieht so aus.
// Einfaches Programm zum Ausprobieren von Operationen #include "../../std_lib_facilities.h" int main() { cout << "Geben Sie einen Gleitkommawert ein: "; int n; double m; cin >> n >> m; cout << "n == " << n << "\nn+1 == " << n+1 << "\ndreimal n == " << 3*n << "\nzweimal n == " << n+n << "\nn zum Quadrat == " << n*n << "\nHaelfte von n == " << n/2 << "\nWurzel von n == " << sqrt(m) << endl; // ein anderer Name für Zeilenumbruch ("end of line") }
Nun muss ich allerdings 2x die gewünschte Zahl im Programm eingeben. Gibt es da nicht auch eine andere Möglichkeit?
Bin absoluter Anfänger.
-
Ja, eben nicht 2x einlesen lassen
int n; double m; cin >> n; m = n; // bzw. besser m = static_cast<double>(n) // weiß aber nicht ob du diesen sog. 'cast' schon kennst
-
Nun hänge ich bei Aufgabe 4 Seite 115 Kapitel 3 fest.
Bekomme immer eine Fehlermeldung bei der if Anweisung.
Fehlermeldung: m was not declared in this scope
If (friend_sex = m) cout << "Mann";// Übung Serienbrief #include "../../std_lib_facilities.h" int main() { cout << "Geben Sie den Namen der Person ein, die den Brief erhalten soll:\n"; string first_name; // first_name ist eine Variable vom Typ string string friend_name; char friend_sex = 0; cin >> first_name; // liest die Zeichen in first_name ein cout << "Liebe/r " << first_name << ",\n"; cout << "Wie geht es Dir? Mir geht es gut. Ich vermisse Dich.\n"; cout << "Gib den Namen eines weiteren Freundes ein\n"; cin >> friend_name; cout << "Hast Du " << friend_name << " in letzter Zeit gesehen?\n"; cout << "Bitte gib mit 'm' oder 'w' an ob Dein Freund männlich oder weiblich ist.\n"; cin >> friend_sex; if (friend_sex = m) cout << "Mann"; if (friend_sex = w) cout << "Frau"; }
-
000ooo000 schrieb:
Nun hänge ich bei Aufgabe 4 Seite 115 Kapitel 3 fest.
Bekomme immer eine Fehlermeldung bei der if Anweisung.
Fehlermeldung: m was not declared in this scope
If (friend_sex = m) cout << "Mann";Du willst die Variable m an friend_sex zuweisen?
Vermutlich nicht. Du willst mit dem Zeichen m vergleichen.
-
if (friend_sex == 'm') ...
-
Genau das wars, vielen Dank
-
kann man anstatt diesem static cast gedöns auch schreiben m {n}; ?
-
Ja, das ist seit C++11 ein Konstruktoraufruf.
Besser ist aber static_cast, da der mehr Tipparbeit ist und einen somit daran erinnert, dass man casts vermeiden sollte.
-
Nathan schrieb:
Ja, das ist seit C++11 ein Konstruktoraufruf.
Besser ist aber static_cast, da der mehr Tipparbeit ist und einen somit daran erinnert, dass man casts vermeiden sollte.Nein, die Konstruktorsyntax mit {} funktioniert nur bei Umwandlungen, bei denen keine Informationen verloren gehen können. Das Warnzeichen "static_cast" sollte man nur dranschreiben, wenn der Cast wirklich gefährlich ist.
-
Ich hatte das immer so verstanden, dass die {} dann eben das Verlorengehen von Informationen verhindern und deshalb eine gute Alternative wären. Oder habe ich das Prinzip von static cast nicht verstanden?^^