signed/unsigned mismatch



  • Schönen guten Abend zusammen. Ich habe in meinem Programm einen Fehler
    mit dem ich leider nicht weiß wie ich umgehen soll.
    In Visual Studio bekomme ich immer den Fehler:
    warning C4018: '<=': signed/unsigned mismatch
    Bin neu weswegen bitte ich um Erklärung bei einer Lösung
    Habt einen schönen Tag:)

    Ps. Programm soll überprüfen ob eine Jahreszahl nen Schaltjahr isch.

    #include <iostream>
    using namespace std;

    int main() {
    int jahreszahl;
    string rechnung = 0;
    int tor = 0;
    int letzteüberprüfung = 0;
    cout << "Aufgabe 12";
    cout << "Bitte geben Sie die Jahreszahl ein\n";
    cin >> jahreszahl;
    rechnung = jahreszahl / 4;
    for (int counter = 0; counter <= rechnung.length();counter++) {
    if (rechnung[counter] == '.') {
    cout << "Das Jahr " << jahreszahl << " ist kein Schaltjahr";
    tor++;
    }
    }
    if (tor == 0) {
    rechnung = '0';
    rechnung = jahreszahl / 100;
    for (int counter = 0; counter <= rechnung.length(); counter++) {
    if (rechnung[counter] == '.') {
    cout << "Das Jahr " << jahreszahl << " ist ein Schaltjahr";
    }
    else {
    letzteüberprüfung++;
    }
    }
    }
    if (letzteüberprüfung == 1) {
    rechnung = '0';
    rechnung = jahreszahl / 400;
    for (int counter = 0; counter <= rechnung.length(); counter++) {
    if (rechnung[counter] == '.') {
    cout << "Das Jahr " << jahreszahl << " ist kein Schaltjahr";
    }
    else {
    cout << "Das Jahr " << jahreszahl << " ist ein Schaltjahr";
    }
    }
    }

    }



  • Dein Kompiler gibt wahrscheinlich noch mehr aus. Außerdem sagt der dir auch in welcher Zeile die Fehler sind.
    Zum Thema signed / unsigned, string::length gibt ein unsigned zurück, du vergleichst aber mit einem signed int.

    Außerdem versuchst du das Ergebnis einer Rechnung einem String zuzuweisen.

    Das auf die Schnelle. In Zukunft bitte Code Tags verwenden und komplette Fehlermeldungen via Copy & Paste posten.



  • jahreszahl / 4; ist eine Ganzzahldivision. Die hat niemals einen Nachkommaanteil.

    Um den Divisionsrest zu bestimmen, gibt es den Modulo Operator.



  • DirkB schrieb:

    jahreszahl / 4; ist eine Ganzzahldivision. Die hat niemals einen Nachkommaanteil.

    Um den Divisionsrest zu bestimmen, gibt es den Modulo Operator.

    jein. doch sie kann Nachkommastellen haben. zB 1999 / 4. Ich habe erst vor ein par Tagen den Modulo Operator kennengelernt. Ich kenne nur das eine bsp:
    if(jahreszahl % 4 == 0){}. Kann man anstatt nur die "4" zu prüfen auch allgemein überprüfen ob das Ergebnis eine Ganzzahl hat? Mir fällt nur umständlich eine Methode mit ner Schleife ein...
    Mfg Chris



  • ahh.... hatte nen denkfehler:D aber danke wegen dem modulo operator. hatte einfach nur zu umständlich gedacht 🙄 👍



  • MrDark7199 schrieb:

    jein. doch sie kann Nachkommastellen haben. zB 1999 / 4.

    199 ist ein Ganzzahl, 4 ist eine Ganzzahl.
    Daraus macht der C++-Compiler eine Ganzzahldivision. Und das Ergebnis davon ist eine Ganzzahl.
    (auch wenn das Ergebnis in einem double abgspeichert wird)

    MrDark7199 schrieb:

    Ich habe erst vor ein par Tagen den Modulo Operator kennengelernt.

    Das wird die Grundlage für diese Aufgabe sein 🙂


Log in to reply