C Funktionen Anfänger Problem *HELP*

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Wissenslücke
Beiträge: 37
Registriert: Mo Feb 22, 2016 6:03 pm

C Funktionen Anfänger Problem *HELP*

Beitrag von Wissenslücke » Sa Mai 07, 2016 3:19 am

hallo liebe community,

ich weiss bei folgendem Problem nicht was ich falsch gemacht habe.
Problem statement
Your function is given a year greater than 1000 AD and less than 10000 AD. Return the string "Leap year" if the given year is a leap year and "Not a leap year" otherwise.

A year is considered a leap year if it is perfectly divisible by 4. Years that are perfectly divisible by 100 (for example, 2000, 2100, 2200) are exceptions. Such a year is a leap year only if it is also perfectly divisible by 400.
mein Vorschlag

Code: Alles auswählen

const char * isLeapYear(int year)
{
   char ly[]= "Leap year";
   char nly[]= "Not a leap year";
   
   
    if((year%4==0 && year%100!=0 )|| (year%100==0 && year%400==0)){
        
        return ly;
       
    }else {
        
        return nly;
       
    }  
    /* Complete this function */
}
Gruß The WL

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: C Funktionen Anfänger Problem *HELP*

Beitrag von cloidnerux » Sa Mai 07, 2016 12:39 pm

ich weiss bei folgendem Problem nicht was ich falsch gemacht habe.
Du solltest uns schon mitteilen, was du deiner Meinung nach nicht Funktioniert.
Ist es die Auswertung des Schaltjahres, ist es das zurückgeben der Strings?

Bitte liefer auch ein compilierbaren Code, dass man dein Problem nachvollziehen kann.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Wissenslücke
Beiträge: 37
Registriert: Mo Feb 22, 2016 6:03 pm

Re: C Funktionen Anfänger Problem *HELP*

Beitrag von Wissenslücke » Sa Mai 07, 2016 1:22 pm

Die Aufgabe ist von einer Seite mit integriertem Compiler. Die Funktion war so ohne Inhalt und ohne main Fkt vorgegeben. Die Seite testet bei Absenden des Codes dann ob das outcome richtig ist. Bei mir kommt halt nur die Info dass das outcome falsch ist. Der Code ist nach meiner Meinung schick, aber ich bin auch ein Anfänger.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: C Funktionen Anfänger Problem *HELP*

Beitrag von cloidnerux » Sa Mai 07, 2016 3:09 pm

Die Aufgabe ist von einer Seite mit integriertem Compiler. Die Funktion war so ohne Inhalt und ohne main Fkt vorgegeben. Die Seite testet bei Absenden des Codes dann ob das outcome richtig ist
Das Hilft einem doch schon weiter.
Der Code ist nach meiner Meinung schick, aber ich bin auch ein Anfänger.
Dein Code an sich Funktioniert auch.

Wenn man das ganze aber mal selber Compiliert:

Code: Alles auswählen

#include "stdio.h"

const char * isLeapYear(int year)
{
   char ly[]= "Leap year";
   char nly[]= "Not a leap year";
   
   
    if((year%4==0 && year%100!=0 )|| (year%100==0 && year%400==0)){
        
        return ly;
       
    }
    else 
    {
        return nly; 
    }  
}

int main()
{
	printf("%s", isLeapYear(2000));
	return 0;
}
Fallen zwei Dinge auf:
1. Der Compiler meckert das man lokale Variablen zurück gibt
2. Es kommt kein "leap year" oder "not leap year" raus, sondern kauderwelsch.
Woran liegt es: Du gibst einen Pointer auf eine Variable im Stack zurück, die nach beenden der Funktion für andere Dinge verwendet wird. Daher kann es keine sinnvolle Ausgabe geben.
Als Lösung gibt es zwei Optionen:
1. Die Variablen als "static" deklarieren.
2. Mit malloc speicher anfordern, den Text dort hinein kopieren und den Speicher zurück geben.
Redundanz macht wiederholen unnötig.
quod erat expectandum

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: C Funktionen Anfänger Problem *HELP*

Beitrag von mfro » Sa Mai 07, 2016 3:28 pm

... und dann gibt's noch eine dritte Möglichkeit (und das ist m.E. die richtige): die Strings als Stringkonstanten im Textsegment anlegen, dann belegt das auch keinen extra Speicher:

Code: Alles auswählen

const char *ly = "Leap year";
const char *nly = "Not a leap year";
...
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: C Funktionen Anfänger Problem *HELP*

Beitrag von cloidnerux » Sa Mai 07, 2016 3:51 pm

und dann gibt's noch eine dritte Möglichkeit (und das ist m.E. die richtige): die Strings als Stringkonstanten im Textsegment anlegen, dann belegt das auch keinen extra Speicher:
Und auch darauf achten, dass man

Code: Alles auswählen

const char * ly
statt

Code: Alles auswählen

const char ly[]
schreibt. Letzteres wird bei mir mit gcc 4.8.1 unter Windows 7 nicht als Text, sondern als lokale Variable erkannt, weswegen ich es auch nicht als Lösung vorgeschlagen hatte.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Wissenslücke
Beiträge: 37
Registriert: Mo Feb 22, 2016 6:03 pm

Re: C Funktionen Anfänger Problem *HELP*

Beitrag von Wissenslücke » Sa Mai 07, 2016 4:31 pm

wunderbar. Ich habs mit Stringkonstanten getestet und es hat funktioniert. Wie immer vielen Dank ;)

Antworten