ich hänge einfach fest



  • hi leute
    ich hab hier was programmiert bin noch der totale anfänger und lerne fleißig aus meine c++ buch doch trotzdem bekomme ich es einfach nicht hin. villeicht könnt ihr mir ja helfen. hier der quellcode:

    #include "stdafx.h"
    #include <iostream>

    int main()

    {
    int arabische_Ziffer;
    char roemmische_Ziffer;
    std::cout << "Gib eine roemische Ziffer ein\n";
    std::cin >> roemische_Ziffer;

    if ("roemische_Ziffer" == "T") arabische_Ziffer = 1;
    else if ("roemische_Ziffer" == "V") arabische_Ziffer = 5;
    else if ("roemische_Ziffer" == "X") arabische_Ziffer = 10;
    else if ("roemische_Ziffer" == "L") arabische_Ziffer = 50;
    else if ("roemische_Ziffer" == "C") arabische_Ziffer = 100;
    else if ("roemische_Ziffer" == "D") arabische_Ziffer = 500;
    else if ("roemische_Ziffer" == "M") arabische_Ziffer = 1000;

    if (arabische_Ziffer == 0) std::cout << "Es wurde keine roemische Ziffer eingegeben!" << std::endl;
    else std::cout << " Zugehörige arabische Ziffer:" << arabische_Ziffer << std::endl;
    }

    vielen dank

    maik



  • Du hättest vll. erwähnen sollen wo der fehler liegt;)

    naja ich hab mal den quellcode überarbeitet:

    #include "stdafx.h"
    #include <iostream>
    
    int main()
    {
    
    int arabische_Ziffer;
    char roemmische_Ziffer;
    std::cout << "Gib eine roemische Ziffer ein\n";
    std::cin >> roemische_Ziffer;
    
    if (roemische_Ziffer == 'T') 
      arabische_Ziffer = 1;
    else if (roemische_Ziffer == 'V') 
      arabische_Ziffer = 5;
    else if (roemische_Ziffer == 'X') 
      arabische_Ziffer = 10;
    else if (roemische_Ziffer == 'L') 
      arabische_Ziffer = 50;
    else if (roemische_Ziffer == 'C') 
      arabische_Ziffer = 100;
    else if (roemische_Ziffer == 'D') 
      arabische_Ziffer = 500;
    else if (roemische_Ziffer == 'M') 
      arabische_Ziffer = 1000;
    
    if (arabische_Ziffer == 0) 
      std::cout << "Es wurde keine roemische Ziffer eingegeben!" << std::endl;
    else 
      std::cout << " Zugehörige arabische Ziffer:" << arabische_Ziffer << std::endl;
    }
    

    der lange if-> else block könntest du mit switch case machen (google mal danach)

    P.S.: Und du bist im MFC forum das was du da hast ist. C++



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Sollte

    if (roemische_Ziffer == 'T')
    arabische_Ziffer = 1;

    nicht

    if (roemische_Ziffer == 'I')
    arabische_Ziffer = 1;

    sein?



  • int arabische_Ziffer;
    

    Variablen sollte man immer initialisieren:

    int arabische_Ziffer = 0;
    

    mfg



  • pZy hat in diesem Fall ziemlich Recht! Stell dir mal vor was passiert, wenn jemand einen Buchstaben eingibt, den du nicht berücksichtigt hast! Welchen Wert hat arabische_Ziffer dann, wenn du sie vergleichst?



  • danke hab mal alles so geändert wie ihr mir das gesagt habt:

    #include "stdafx.h"
    #include <iostream>

    int main()

    {
    int arabische_Ziffer = 0;
    char roemmische_Ziffer;
    std::cout << "Gib eine roemische Ziffer ein\n";
    std::cin >> roemische_Ziffer; /*zeile 13*/

    if ("roemische_Ziffer" == "I") arabische_Ziffer = 1;
    else if ("roemische_Ziffer" == "V") arabische_Ziffer = 5;
    else if ("roemische_Ziffer" == "X") arabische_Ziffer = 10;
    else if ("roemische_Ziffer" == "L") arabische_Ziffer = 50;
    else if ("roemische_Ziffer" == "C") arabische_Ziffer = 100;
    else if ("roemische_Ziffer" == "D") arabische_Ziffer = 500;
    else if ("roemische_Ziffer" == "M") arabische_Ziffer = 1000;

    if (arabische_Ziffer == 0) std::cout << "Es wurde keine roemische Ziffer eingegeben!" << std::endl;
    else std::cout << " Zugehörige arabische Ziffer:" << arabische_Ziffer << std::endl;
    }

    jetzt habe ich noch eine fehlermeldung und ich weis echt nicht was ich noch tun soll und ich bin einfach noch total grün hinter den ohren.

    1>------ Erstellen gestartet: Projekt: römische zahlen, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>römische zahlen.cpp
    1>c:\dokumente und einstellungen\maik\eigene dateien\visual studio 2008\projects\römische zahlen\römische zahlen\römische zahlen.cpp**(13) : error C2065: 'roemische_Ziffer': nichtdeklarierter Bezeichner**1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Maik\Eigene Dateien\Visual Studio 2008\Projects\römische zahlen\römische zahlen\Debug\BuildLog.htm" gespeichert.
    1>römische zahlen - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    vielleicht wisst ihr noch was

    lg maik



  • Guck mal Zeile 11, "char roemmische_Ziffer;" 🙂 Es gibt übrigens die C++-Tags, damit ist der Code um einiges einfacher zu lesen. Einfach den Code mit

    und
    

    ummanteln 👍



  • Fehler liegt da:

    std::cin >> roemische_Ziffer; /*zeile 13*/
    

    Rechtschreibung beachtet auch der Compiler.

    Das hier solltest du aber auch nochmal übredenken:

    if ("roemische_Ziffer" == "I") arabische_Ziffer = 1;
    


  • diese else if blöcke schreien doch nach einem switch...

    switch(roemische_Ziffer)
    {
    case 'I'
        arabische_Ziffer = 1;
    case 'V'
        arabische_Ziffer = 5;
    case 'X'
        arabische_Ziffer = 10;
    case 'L'
        arabische_Ziffer = 50;
    case 'C'
        arabische_Ziffer = 100;
    case 'D'
        arabische_Ziffer = 500;
    case 'M'
        arabische_Ziffer = 1000;
    }
    


  • deine cases schreien doch nach einem : und einem break;



  • So funzt's:

    #include "stdafx.h"
    #include <iostream>
    
    int main()
    
    {
    int arabische_Ziffer = 0;
    char roemische_Ziffer;
    std::cout << "Gib eine roemische Ziffer ein\n";
    std::cin >> roemische_Ziffer; /*zeile 13*/
    
    if ("roemische_Ziffer" == "I") arabische_Ziffer = 1;
    else if ("roemische_Ziffer" == "V") arabische_Ziffer = 5;
    else if ("roemische_Ziffer" == "X") arabische_Ziffer = 10;
    else if ("roemische_Ziffer" == "L") arabische_Ziffer = 50;
    else if ("roemische_Ziffer" == "C") arabische_Ziffer = 100;
    else if ("roemische_Ziffer" == "D") arabische_Ziffer = 500;
    else if ("roemische_Ziffer" == "M") arabische_Ziffer = 1000;
    
    if (arabische_Ziffer == 0) std::cout << "Es wurde keine roemische Ziffer eingegeben!" << std::endl;
    else std::cout << " Zugehörige arabische Ziffer:" << arabische_Ziffer << std::endl;
    } 
    cin.get();
    }
    


  • if ("roemische_Ziffer" == "I") arabische_Ziffer = 1;
    else if ("roemische_Ziffer" == "V") arabische_Ziffer = 5;
    else if ("roemische_Ziffer" == "X") arabische_Ziffer = 10;
    else if ("roemische_Ziffer" == "L") arabische_Ziffer = 50;
    else if ("roemische_Ziffer" == "C") arabische_Ziffer = 100;
    else if ("roemische_Ziffer" == "D") arabische_Ziffer = 500;
    else if ("roemische_Ziffer" == "M") arabische_Ziffer = 1000;
    

    😮

    Und was macht das deiner Meinung nach?



  • JustAnotherNoob schrieb:

    deine cases schreien doch nach einem : und einem break;

    ach sch**** hab nicht aufgepasst, habs schnell dahingeschmissen, während ich was anderes gemacht habe... 🤡

    so habs jetzt mal eingefuegt^^

    switch(roemische_Ziffer)
    {
    case 'I':
        arabische_Ziffer = 1;
        break;
    case 'V':
        arabische_Ziffer = 5;
        break;
    case 'X':
        arabische_Ziffer = 10;
        break;
    case 'L':
        arabische_Ziffer = 50;
        break;
    case 'C':
        arabische_Ziffer = 100;
        break;
    case 'D':
        arabische_Ziffer = 500;
        break;
    case 'M':
        arabische_Ziffer = 1000;
        break;
    }
    

    🤡



  • JustAnotherNoob schrieb:

    deine cases schreien doch nach einem : und einem break;

    Oder gleich std::map<char, int> verwenden, dann kann man sich die Codeduplizierung (x Zuweisungen) sparen...

    Und um es nochmals klarzustellen:

    if ("roemische_Ziffer" == "I")
    

    vergleicht die beiden Strings (bzw. deren Adressen) und ergibt folglich immer false . Variablennamen werden nicht in Anführungszeichen geschrieben.



  • drakon schrieb:

    if ("roemische_Ziffer" == "I") arabische_Ziffer = 1;
    else if ("roemische_Ziffer" == "V") arabische_Ziffer = 5;
    else if ("roemische_Ziffer" == "X") arabische_Ziffer = 10;
    else if ("roemische_Ziffer" == "L") arabische_Ziffer = 50;
    else if ("roemische_Ziffer" == "C") arabische_Ziffer = 100;
    else if ("roemische_Ziffer" == "D") arabische_Ziffer = 500;
    else if ("roemische_Ziffer" == "M") arabische_Ziffer = 1000;
    

    😮

    Und was macht das deiner Meinung nach?

    Immerhin funktioniert dieses Programm sogar unabhängig von den Benutzereingaben - kann man nicht von jedem Programm behaupten (sozusagen der Heilige Gral der stabilen Programmierung) 😉

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Immerhin funktioniert dieses Programm sogar unabhängig von den Benutzereingaben - kann man nicht von jedem Programm behaupten (sozusagen der Heilige Gral der stabilen Programmierung) 😉

    Gruß,

    Simon2.

    :p

    Dann ist aber schon zu viel Arbeit reingesteckt worden. 🙂

    Das hier finde ich besser. Ist gerade noch so überschaubar und man kann noch weniger Fehler machen. 😉

    int main (){}
    


  • Ich habe auch ein Problem:
    ich finde einfach den Fehler nicht... es kommt immer eine Fehlermedung dass versch. Sachen nicht gefunden werden können...

    // Gruss-Void
    #include <iostream>
    using namespace std;
    
    void gruss()
    {
    	cout<<endl;
    	cout<<"Hallo Programmierer!"<<endl;
    	cout<<endl;
    }
    int main()
    {
    	double fahrenheit;
    	double celsius;
    
    	gruss();
    
    	cout<<"Temperatur in Fahrenheit: ";
    	cin<<fahrenheit;
    
    	celsius =(fahrenheit - 32) * 5.0 / 9.0;
    
    	cout<<fahrheit
    		<<" Grad Fahrenheit entsprechen "
    		<<celsius
    		<<" Grad Celsius"<<endl;
    
    	gruss();
    
    	return 0;
    }
    


  • Dann sag mal, was nicht gefunden werden kann.



  • cin<<fahrenheit;
    

    nochmal überdenken...

    Du willst gerade den Wert von "fahrenheit" in die Ausgabe schieben... 😮

    edit: und: (Z.23)

    cout<<fahrheit
    

    Nächstes mal bitte mit Fehler:

    $ g++ test1.cpp -o test1
    test1.cpp:31:11: warning: no newline at end of file
    test1.cpp: In function ‘int main()’:
    test1.cpp:19: error: no match for ‘operator<<’ in ‘std::cin << fahrenheit’
    test1.cpp:23: error: ‘fahrheit’ was not declared in this scope
    


  • if (arabische_Ziffer == 0)

    Unabhängig von Benutzer Eingaben?
    Naja, ich weiss ja nicht.


Anmelden zum Antworten