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...