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?^^


Anmelden zum Antworten