Erste Programme zum Laufen bringen



  • Hallo,

    in meinem derzeitigen Semester wird C++ uns beigebracht. Bei meinem Heimpc bekomme ich aber die ersten Programme nicht zum laufen...

    Ich habe jetzt Bloodshed Dev-C++ und Notepad++ ausprobiert. Unser Prof meint wir sollen Notepad++ verwenden.
    Ich wollte jetzt mal dieses Programm ausprobieren:

    #include <iostream>

    using namespace std;

    int main()
    {
    int name;

    cout << "Geben Sie Ihren Vornamen ein: ";

    cin >> name;

    cout << "Hallo, " << name << "! \nWie geht's dir?" <<endl;

    cin.get();return(0);
    }

    Ich sehe keinen Fehler und ein Kollege von mir auch nicht. Problem ist nur, dass ich nirgends darüber hinauskomme, dass ich meinen Vornamen eingebe und dann Enter drücke und dann schließt das Textfenster.
    Das da dann "Hallo, ...." stehen soll, ist leider nicht der Fall.
    Ich weiß nicht woran das liegen mag.

    Ich habe auch noch ein anderes Problem gerade bei Notepad++.

    Der Prof. meint, wir sollen dies dort unter "Ausführen" eingeben:
    cmd /K C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat\ & & cl.exe /EHsc "$(FULL_CURRENT_PATH)"

    Leider öffnet sich da mein Textfenster nur ganz kurz und ist dann schon wieder weg. Das sollte ja doch eigentlich durch das /K nicht da sein. Ist es aber leider.

    Ich hoffe es kann mir da jemand helfen 🙂



  • int name;
    ->
    std::string name;
    Braucht ein #include <string>

    Problem:
    ein int ist keine Zeichenkette...



  • Du erwartest da einen Integer und keine Zeichenkette. Ich empfehle std::string in Verbindung mit std::cin>> (wie in deinem Beispiel) oder getline().

    So und jetzt nochmal probieren, hop hop.



  • l'abra d'or schrieb:

    int name;
    ->
    std::string name;
    Braucht ein #include <string>

    Stimmt gar nicht. KoyaKarpfen-Fuchs kann's sogar pfusch0rn:

    std::string Buffer;
    std::cin.getline(const_cast<char *> (Buffer.c_str()), 256);
    

    😃



  • So, ich hab nochmal nachgeschaut und ihr hattet Recht. Mein Prof hatte es so dastehen. Problem ist aber immer noch, dass ich nur meinen Vornamen eingeben kann und das darauffolgende nicht mehr erscheint 🙂

    #include <iostream>
    #include <string>

    using namespace std;

    int main()
    {
    cout << "Geben Sie Ihren Vornamen ein:";

    string name;
    cin >> name;

    cout << "Hallo, " << name << "! \n Wie gehts's?"<<endl;
    return(0);
    }



  • Der Stream wird beendet, sobald Enter gedrückt wird. Entweder Vor- und Nachname mit zwei verschiedenen std::cin>>-Aufrufen holen oder mit Leertaste eingeben. Achja, um den Return-Wert muss keine Klammer.



  • // cin >> name;
    std::getline(cin, name);
    


  • der Stream wird beendet, sobald Enter gedrückt wird. Entweder Vor- und Nachname mit zwei verschiedenen std::cin>>-Aufrufen holen oder mit Leertaste eingeben. Achja, um den Return-Wert muss keine Klammer.

    Es wäre ja nur eine Engabe. Also der Vorname.
    Ist es dann nicht so, dass ich den Teil:

    cout << "Hallo, " << name << "! \n Wie gehts's?"<<endl;
    return0;
    }

    dann total vergessen kann, weil ich muss ja Enter drücken um in den nächsten "Bereich zu kommen oder? Was würde dann sonst noch funktionieren?

    Sagen wir mal, ich gib als Vorname Sepp ein, dann müsste doch nachdem ich Sepp eingegeben habe und was gedrückt habe, doch dastehen:

    Hallo Sepp,
    Wie geht's?

    In der Vorlesung steht auch, dass using namespace std erspart uns die Wiederholung des Gültigkeitsbereichs in den Anweisungen.



  • Tut's doch auch, nachdem man Enter gedrückt hat 👍



  • Hallo,

    damit das Programm nicht so schnell beendet wird musst du vor'm "return 0" eine Eingabe o.ä. fordern:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    char dumb; 
    cout << "Geben Sie Ihren Vornamen ein:";
    
    string name;
    cin >> name;
    
    cout << "Hallo, " << name << "! \n Wie gehts's?"<<endl;
    
    cin  >> dumb; // Programm warten bis eine Eingabe kommt
    return(0);
    }
    


  • @_) ich danke dir. Jetzt gehts.
    Ich versteh nur nicht, warum er uns dann sowas vorgibt, wenn dann die Hälfte vom Programm nicht funktioniert. ^^

    Danke auch an die anderen. Ich werd mich noch häufiger an euch wenden ;). Will ja die Prüfung bestehen.



  • Das Programm funktioniert einwandfrei. Nur bleibt die Konsole halt nicht offen (:

    Eine Alternative ist übrigens std::cin.get(); (anstelle des cin).



  • Mittlerweile hat unser Prof gemeint, dass dies so gedacht war um uns anfänglich etwas zu verwirren.

    Es reicht wenn wir
    #include <conio.h>
    und am Ende
    getch();
    eingeben.

    Ich habe wie versprochen mittlerweile wieder eine Frage:

    #include <iostream>
    #include <conio.h>

    using namespace std;

    int main()
    {
    int zahl,z2;
    cout << "Gib eine Zahl zwischen 5 - 15 ein" << endl;

    cin >> zahl;

    if (zahl < 5 || zahl > 15)
    { cout << "Ungueltige Zahl!" << endl;
    getch();return(0);
    }
    cout << "Geben Sie eine 2. Zahl im Bereich von 5 - 15 an" << endl;
    cin >> z2;
    if (zahl < 10 && z2 < 10)
    { cout << "Die Zahlen sind beide unter 10!"<<endl;}
    else if (zahl==z2) {cout << "Die Zahlen sind Beide gleich"<<endl;}
    else {cout << "Die Summe lautet " << zahl + z2 <<endl;}

    getch();return(0);
    }

    Die dickgedruckte Zeile wird bei mir in keinem Fall ausgegeben. Wo liegt der Fehler? Wär euch wirklich sehr dankbar.

    Habe schon paar Blätter überprüft, aber ich seh den Fehler mit meinem ungeschulten Auge nicht.



  • "conio.h" ist ein DOS-Header und hat als solcher wenig mit Standard-C++ zu tun...ein cin.get() tut's da auch, und ist noch dazu unabhängig vom Betriebssystem.

    Ein Tipp zu deinem Problem: Gib mal zwei gleiche Zahlen ein, die beide >= 10 sind und sieh dir die Verwendung von else if nocheinmal an. Na?



  • Mittlerweile hat unser Prof gemeint, dass dies so gedacht war um uns anfänglich etwas zu verwirren.

    An welcher Uni bist du denn? oO



  • Ein Tipp zu deinem Problem: Gib mal zwei gleiche Zahlen ein, die beide >= 10 sind und sieh dir die Verwendung von else if nocheinmal an. Na?

    Vielen Dank, ich habs kapiert. Wenn ich Zahlen unter 10 angebe, dann wird es automatisch:

    { cout << "Die Zahlen sind beide unter 10!"<<endl;}

    Danke.



  • Neue Frage:

    Wir haben gestern ein paar Übungen bekommen, die wir lösen sollen bzw. am Montag will der Prof sie uns erklären. Ich will aber schonmal bissl Vorarbeit leisten.

    Ich muss dazu den Befehl fixed einbinden um z.B. die Zahl PI mit 3 Nachkommastellen auszugeben:

    #include <iostream>
    #include <iomanip>
    #include <math.h>

    using namespace std;

    int main()
    {

    double atan(double),a;

    a = 4 * atan(1.0);

    fixed; cout.precision(3) << a << endl;

    Ich weiß nur leider nicht, wie ich dieses fixed miteinbaue, sodass keine Fehlermeldung kommt. Ansonsten müsste ja der Vorgang so passen oder?

    Das gleiche Problem habe ich auch bei: scientific

    double c;

    c = a /= 100;

    scientific; cout.precision(2) << c << endl;

    getch();return(0);



  • cout << setprecision(2) << scientific << d << endl;
    


  • Dankeschön 🙂

    Nun funktioniert es.



  • Hallo,

    ich habe wiedermal ein kleines Problem bei der Schreibweise eines Befehls:

    q = (1+Zins)/(12*100);

    Summe = Rate * (1-q pow(n)) / (q pow(n) - q pow(n+1));

    Mir wurde gesagt, dass man z.b. 1^2 in C++ nicht schreiben kann. Darum muss man math.h einbinden und dann mit pow(n) arbeiten.
    In dem Fall wäre es halt z.b. q^n. Ich weiß nur nicht wie ich das sinnvoll mit pow eingeben kann, den wenn ich es wie oben machen, dann kommt eine Fehlermeldung im Compiler.


Log in to reply