Kleines Codingproblem bei C#

  • Guten Abend, Breadfish. Ich hab was gescriptet, für ein "Strategiespiel", welches ausrechnet, wieviel Gold ich noch übrig habe/fehlt wenn ich x Truppen kaufe, jedoch kommt bei beidem nur das erste raus, dann würde da stehen: Du hast noch -10 Goldstuecke übrig, das soll aber nicht passieren. Ich glaub jeder der c# codet, wird den Code verstehen, weil ich das erst seit 30 Minuten mache



    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
    int Gold = 50;
    int Preis = 20;
    int Anzahl;
    int Rest;
    int Ungenügend;
    cout << "Gib an wieviele Truppen du willst!" << endl;
    cin >> Anzahl;
    Ungenügend = (Gold-Preis*Anzahl) * -1;
    Rest = Gold - Preis * Anzahl;
    getchar();
    if(Gold >= Rest)
    {
    cout <<"<><><><><><><><><>" << endl;
    cout << " " << endl;
    cout << "Du hast erfolgreich die Truppen gekauft!" << endl
    << "Du hast noch " << Rest << " Goldstuecke uebrig!" << endl;
    cout << " " << endl;
    cout <<"<><><><><><><><><>" << endl;
    }
    else
    {
    cout <<"<><><><><><><><><>" << endl;
    cout << " " << endl;
    cout <<"Du hast " << Gold << " Gold, jedoch werden " << Preis * Anzahl << " Goldstuecke benoetigt." << endl
    << "Dementsprechend fehlen dir: " << Ungenügend << " Goldstuecke!" << endl;
    cout << " " << endl;
    cout <<"<><><><><><><><><>" << endl;
    }
    getchar();
    return 0;
    }



    MfG

  • Guten Abend, Breadfish. Ich hab was gescriptet, für ein "Strategiespiel", welches ausrechnet, wieviel Gold ich noch übrig habe/fehlt wenn ich x Truppen kaufe,



    Habe es dir ein wenig umgeschrieben ;)
    Beenden mit Eingabe -1


  • Habe es dir ein wenig umgeschrieben ;)
    Beenden mit Eingabe -1


    Erstmal vielen Dank, jedoch hab ich immernoch errors :/ :
    1>------ Erstellen gestartet: Projekt: CPPTest, Konfiguration: Debug Win32 ------
    1> main.cpp
    1>d:\users\johannes\documents\visual studio 2010\projects\cpptest\cpptest\main.cpp(15): error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'int' akzeptiert (oder keine geeignete Konvertierung möglich)
    1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(50): kann 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator =(std::basic_istream<_Elem,_Traits> &&)' sein
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(860): oder "std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator =(const std::basic_istream<_Elem,_Traits> &)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> bei Anpassung der Argumentliste '(std::istream, int)'
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

  • Erst einmal habe ich etwas übersehen :D:
    #include <iostream>
    #include <string>
    using namespace std;
    int main(void)
    {
    int Gold = 50;
    int Preis = 20;
    int Anzahl;


    do {
    cout << "Gib an wieviele Truppen du willst!" << endl;
    cin >> Anzahl;
    Gold -= Preis*Anzahl;

    if(Gold > 0)
    {
    cout <<"<><><><><><><><><>" << endl;
    cout << "Du hast erfolgreich die Truppen gekauft!" << endl
    << "Du hast noch " << Gold << " Goldstuecke uebrig!" << endl;
    cout <<"<><><><><><><><><>\n" << endl;
    }
    else if(Anzahl != -1)
    {
    Gold += Preis*Anzahl;
    cout <<"<><><><><><><><><>" << endl;
    cout <<"Du hast " << Gold << " Gold, jedoch werden " << Preis * Anzahl << " Goldstuecke benoetigt." << endl
    << "Dementsprechend fehlen dir: " << Preis*Anzahl-Gold << " Goldstuecke!" << endl;
    cout <<"<><><><><><><><><>\n" << endl;

    }
    } while(Anzahl != -1);
    cout << "\n\nBeendet!\n";
    getchar();
    return 0;
    }


    Zu deinem Error, könntest du mir die Zeile schicken oder besser den 'Kontext' und die Zeile markieren?

    3 Mal editiert, zuletzt von heyhooo ()

  • Ich kann zwar kein c#, aber es liegt an Zeile 16.
    if(Gold >= Rest)
    ->
    if(Rest >= 0)

  • Wenn du gucken könntest, dann siehst du wohl, dass es meins schon eingefügt hat ^^.


    Blind bin Ich noch nicht :)
    Super, und dann bringt ihm das was?
    Glaubst du er sieht seinen Fehler wenn du ihm einen neuen Code schreibst?
    Ich denke eher nicht.


    MfG Kevin

  • Also in der Fehlermeldung steht etwas von Zeile 50....


    Da steht auch was von istream.
    und nicht von main.cpp


    das problem ist das cin >> Anzahl


    cin gibt einen char zurück keinen Integer, was auch in der Fehlerbeschreibung steht

    Code
    Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'int' akzeptiert (oder keine geeignete Konvertierung möglich)


    Binär Operator ist in diesem Fall ">>"


    sprich auf der rechten Seite stimmt etwas nicht.


    Die rechte seite muss um konvertiert werden in einen integer


    char a;
    cin >> a;
    Anzahl = Convert.ToInt32(a);
    Das sollte die Lösung sein :thumbup:

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Ja, das mit >> stimmt, jedoch @heyhoo, würde ich gerne auf meinem Code aufbauen, damit ich was lerne :D
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
    int Gold = 50;
    int Preis = 20;
    int Anzahl;
    int Rest;
    int Ungenügend;
    cout << "Gib an wieviele Truppen du willst!" << endl;
    cin >> Anzahl;
    Ungenügend = (Gold-Preis*Anzahl) * -1;
    Rest = Gold - Preis * Anzahl;
    getchar();
    if(Rest >> 0)
    {
    cout <<"<><><><><><><><><>" << endl;
    cout << " " << endl;
    cout << "Du hast erfolgreich die Truppen gekauft!" << endl
    << "Du hast noch " << Rest << " Goldstuecke uebrig!" << endl;
    cout << " " << endl;
    cout <<"<><><><><><><><><>" << endl;
    }
    else
    {
    cout <<"<><><><><><><><><>" << endl;
    cout << " " << endl;
    cout <<"Du hast " << Gold << " Gold, jedoch werden " << Preis * Anzahl << " Goldstuecke benoetigt." << endl
    << "Dementsprechend fehlen dir: " << Ungenügend << " Goldstuecke!" << endl;
    cout << " " << endl;
    cout <<"<><><><><><><><><>" << endl;
    }
    getchar();
    return 0;
    }
    Gleicher Fehler mit "Du hast noch -x übrig". :/

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • 1. Zeile 16 >= statt >> ?!
    2. Nicht konvertiert, siehe Beitrag von BlackAce

  • dass mit konvertieren versehe ich aber nicht :/


    Ach gott, dann frag doch :D


    cin gibt halt ein Zeichen zurück.
    Ein Zeichen ist aber keine Zahl, deswegen muss man dies halt umwandeln.


    Aber nicht via ASCII, denn da würde was ganz anderes rauskommen -> siehe ASCII Tabelle, sondern du musst es 1:1 umwandeln und das funktioniert mit der Klasse Convert und der Funktion ToInt32
    nachzulesen hier: http://msdn.microsoft.com/de-d…9t2871%28v=vs.110%29.aspx


    Wenn du fragen hast - frag, dafür gibt es das Forum schließlich ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Okay, sorry. Ich bin dumm. :D
    So UNGEFÄHR versteh ich das schon, jedoch versteh ich das mit dem Konvertieren immernoch nicht wo in meinem "Script" ich das einbauen soll, usw.
    Hätt ich gewusst, dass es so schwer, wäre, hätt ichs lieber gelassen. :D

  • Die Lösung steht hier ja schon
    char a;
    cin >> a;
    Anzahl = Convert.ToInt32(a);
    Wo das ersetzt werden sollte eigentlich klar sein ^^

    Hätt ich gewusst, dass es so schwer, wäre, hätt ichs lieber gelassen. :D


    Schwierig ist das nun wirklich nicht.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • cin gibt halt ein Zeichen zurück.


    Stimmt aber auch nur bedingt.



    #include <iostream>


    int main()
    {
    int anzahl = 0;
    std::cout << "Gib eine Zahl ein:" << std::endl;
    std::cin >> anzahl;
    if(anzahl > 500)
    {
    std::cout << "Du hast viel Geld!" << std::endl;
    }
    std::cout << anzahl << std::endl;
    system("PAUSE");
    return 0;
    }



    funktioniert einwand Frei auch mit Zahlen. Wundert mich das er diesen Fehler bekommt.

  • funktioniert einwand Frei auch mit Zahlen.


    Mir fällt jetzt auch erst auf das wir uns gar nicht in C# befinden, sondern in C++.
    upps :D


    Hast Recht, trotzdem sollte man kein integer einlesen lassen um einen Fehler zu vermeiden.


    Ich hab das jetztauch mal bei mir ausprobiert, den im ersten Post, und hab keine (Compiler) Fehler.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski