Was ist falsch ???



  • Hab hier eine Funktion geschrieben der ein Monat und ein Jahr übergeben wird und die dann zurück gibt wie viele Tage dieser Monat hat. Aber irgendwie funktioniert es nicht ganz. Er gibt immer nur 31 zurück.
    Vielleicht kann mal jemand drüber gucken ob er einen Fehler sieht.

    Wahrscheinlich ist es ein ganz billiger Fehler. *schäm*

    #include <stdio.h>
    
    int dayspermonth(int month, int year) 
    {
        // days per month
    	int dayspm ;
    
    	if(year <= 49)
    		year = year + 2000 ;
    	else
    		year = year + 1900 ;
    
    	if(month == 1 || 3 || 5 || 7 || 8 || 10 || 12) 
    	{
    		dayspm = 31 ; 
    	} 
    	else if(month == 2)
    	{ 
    
    		if((year % 4) > 0)  //Schaltjahr (2000) 
    		{ 
    			dayspm = 28; 
    		} 
    		else 
    		{ 
    			dayspm = 29; 
    		}
    
    	} 
    	else 
    	{ 
    		dayspm = 30 ; 
    	}
    
    	return(dayspm) ; 
    }
    
    main()
    {
    	int dayspm, day, month, year;
    
    	printf("Geben Sie ein Datum ein. (Format: z.B. 01 12 03, Leerzeichen statt Punkte)\n") ;
    	scanf("%i %i %i", &day, &month, &year) ;
    	fflush(stdin) ;
    
    	dayspm = dayspermonth(month, year) ;
    
    	printf("\nDer Monat hat %i Tage.\n\n", dayspm) ;
    
    	return(0) ;
    
    }
    


  • if(month == 1 || 3 || 5 || 7 || 8 || 10 || 12)

    das liest der Compiler so:

    Wenn month gleich 1 ist oder 3 ungleich 0 ist oder 5 ungleich 0 ist ...

    du verstehst?

    was du meinst ist:

    if(month==1 || month==3 || month==5 ...

    hier empfiehlt sich deshalb ein switch()

    BTW:
    fflush(stdin) ist nicht erlaubt.



  • Aha, alle klar. Danke

    Shade Of Mine schrieb:

    BTW:
    fflush(stdin) ist nicht erlaubt.

    Was heißt das? Ich hab das so in der Schule gelernt.



  • Jarvis schrieb:

    Shade Of Mine schrieb:

    BTW:
    fflush(stdin) ist nicht erlaubt.

    Was heißt das? Ich hab das so in der Schule gelernt.

    Laut C Standard ist das Verhalten von fflush(stdin) undefiniert - es kann also alles passieren oder auch garnix.



  • if((year % 4) > 0)  //Schaltjahr (2000)  
            {  
                dayspm = 28;  
            }  
            else  
            {  
                dayspm = 29;  
            }
    

    Das stimmt nicht! Ein Schaltjahr hast Du dann, wenn die Jahreszahl durch 4 oder 400 aber nicht durch 100 teilbar ist. Also:

    if((year % 4) && ((year % 100)!=0) || (year % 400))  //Schaltjahr (2000)  
            {  
                dayspm = 29;  
            }  
            else  
            {  
                dayspm = 28;  
            }
    


  • Shade Of Mine schrieb:

    Laut C Standard ist das Verhalten von fflush(stdin) undefiniert - es kann also alles passieren oder auch garnix.

    Dann werde ich demnächst mal meinen Lehrer damit konfrontieren. 😉

    @benutzername: Ja, stimmt, hatte ich nicht beachtet. Danke für den Hinweis.


Anmelden zum Antworten