ungültige Ziffer im Programm



  • Hallo,

    Beim complimieren des programms kommt jedesmal die fehlermeldung:

    1>.\kalender.c(42) : error C2041: Ungültige Ziffer '8' für Basis '8'
    1>.\kalender.c(43) : error C2041: Ungültige Ziffer '9' für Basis '8'
    1>.\kalender.c(87) : error C2041: Ungültige Ziffer '8' für Basis '8'
    1>.\kalender.c(91) : error C2041: Ungültige Ziffer '9' für Basis '8'
    1>.\kalender.c(130) : error C2041: Ungültige Ziffer '8' für Basis '8'
    1>.\kalender.c(131) : error C2041: Ungültige Ziffer '9' für Basis '8'

    die ergibt sich wenn man:
    (monat ==08 && tag <=31) ||
    (monat ==09 && tag <=30) ||

    die anderen funktionieren einwandfrei...Was soll das heißen?

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main ()
    
    { // Beginn des Hauptprogramms!
    
    int tag,monat,jahr;
    
    char weiter ='j';
    int schaltjahr; 
    
    //cls
    
    printf("\n \t * ~ * W I L K O M M E N * ~ *\n");
    getch();
    //cls
    while(weiter == 'j' || 'J' || 'y' || 'Y' || 1)  // wird die taste j gedrückt wird der Prozess neugestartet!
    {
    
    do
    { // do while schleife
    
    printf("\n Bitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n");
    
    scanf( "%2u.%2u.%4u", &tag, &monat, &jahr );
    fflush (stdin);
    
    schaltjahr = (!(jahr%4 && jahr %100 && jahr%400));
    //schaltjahr =(!(jahr%4));
    
    if( (monat ==01 && tag <=31)||   // Solange Bedingungen war wird das Datum ausgegeben!
    (monat ==02 && tag <=28) ||
    (monat ==03 && tag <=31) || 
    (monat ==04 && tag <=30) ||
    (monat ==05 && tag <=31) ||
    (monat ==06 && tag <=30) ||
    (monat ==07 && tag <=31) ||
    (monat ==08 && tag <=31) ||
    (monat ==09 && tag <=30) ||
    (monat ==10 && tag <=31) ||
    (monat ==11 && tag <=30) ||							//(monat ==02 && (!(schaltjahr)))||
    (monat ==12 && tag <=31) ||
    ((monat ==02) && (tag ==29)&& (schaltjahr)))
    
    {
    switch(monat)
    { // beginn switch anweisung
    case 01:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. januar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 02:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Februar.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 03:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. März.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 04:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. April.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 05:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Mai.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 06:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Juni.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 07:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Juli.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 08:
    	printf(" %i. August.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 09:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. September.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 10:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Oktober.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 11:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. November.%iund verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    
    	case 12:
    	printf("\nDatum ist Plausibel!\n");
    	printf(" %i. Dezember.%i und verfuegt: %i Schaltjahr/e!",tag,jahr,schaltjahr);
    	break;
    } // ende switch anweisung!
    
    }
    
    else
    
    {
    	printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr);// Ausgabe Prüfmodul
    
    }
    
    } while( (monat ==01 && tag >31)||   // Prüfmodul! Solange Bedingung wahr, wird der Vorgang wiederholt!
    (monat ==02 && tag >29) || 
    (monat ==02 && tag==29 && (!(schaltjahr)))||
    (monat ==03 && tag >31) || 
    (monat ==04 && tag >30) ||
    (monat ==05 && tag >31) ||
    (monat ==06 && tag >30) ||
    (monat ==07 && tag >31) ||
    (monat ==08 && tag >31) ||
    (monat ==09 && tag >30) ||
    (monat ==10 && tag >31) ||
    (monat ==11 && tag >30) ||
    (monat ==12 && tag >31) ||
    (monat > 12));     // do while Schleife
    
        printf("\n\nWollen Sie den den Prozess wiederholen \nDann taetigen Sie fuer Ja die Taste j und fuer Nein die Taste \n\n");
    	weiter=getch();
    
    }
    	system("pause");
    
    } // Ende des Hauptprogrammas!
    

    1>------ Neues Erstellen gestartet: Projekt: seminaraufgabe, Konfiguration: Release Win32 ------
    1>Die Zwischen- und Ausgabedateien für das Projekt "seminaraufgabe" mit der Konfiguration "Release|Win32" werden gelöscht.
    1>Kompilieren...
    1>kalender.c
    1>.\kalender.c(17) : warning C4013: 'getch' undefiniert; Annahme: extern mit Rückgabetyp int
    1>.\kalender.c(28) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): Siehe Deklaration von 'scanf'
    1>.\kalender.c(42) : error C2041: Ungültige Ziffer '8' für Basis '8'
    1>.\kalender.c(43) : error C2041: Ungültige Ziffer '9' für Basis '8'
    1>.\kalender.c(87) : error C2041: Ungültige Ziffer '8' für Basis '8'
    1>.\kalender.c(91) : error C2041: Ungültige Ziffer '9' für Basis '8'
    1>.\kalender.c(130) : error C2041: Ungültige Ziffer '8' für Basis '8'
    1>.\kalender.c(131) : error C2041: Ungültige Ziffer '9' für Basis '8'
    1>Das Buildprotokoll wurde unter "file://c:\Users\hasso\Documents\Visual Studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\seminaraufgabe\seminaraufgabe\Release\BuildLog.htm" gespeichert.
    1>seminaraufgabe - 6 Fehler, 2 Warnung(en)
    ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========

    lg hasso



  • Alle "Zahlen" mit einer Null (nicht 0x) am Anfang werden oktal interpretiert. Und Oktalzahlen können nur Zifferm von 0 bis 7 enthalten... geht an sich aber auch aus der Fehlermeldung hervor.



  • lagalopex schrieb:

    Alle "Zahlen" mit einer Null (nicht 0x) am Anfang werden oktal interpretiert. Und Oktalzahlen können nur Zifferm von 0 bis 7 enthalten... geht an sich aber auch aus der Fehlermeldung hervor.

    achja stimmt.

    gut danke habs verbessert indem ich eine 0xdavor geschrieben habe.

    lg hasso



  • hasso schrieb:

    lagalopex schrieb:

    Alle "Zahlen" mit einer Null (nicht 0x) am Anfang werden oktal interpretiert. Und Oktalzahlen können nur Zifferm von 0 bis 7 enthalten... geht an sich aber auch aus der Fehlermeldung hervor.

    achja stimmt.

    gut danke habs verbessert indem ich eine 0xdavor geschrieben habe.

    lg hasso

    0x wird als hex interpretiert 😮 ... lass doch einfach die null am anfang weg...


Anmelden zum Antworten