Forum: PC-Programmierung Neu mit Funktionen in C


von Wado U. (racole)


Lesenswert?

Moin ich hab hier grad mal diesen Code geschrieben, wo ich mit 
Funktionen arbeite in C.
Ich habe folgendes Problem ich muss hier, doch eigentlich noch
int eingabeDatum();  einfügen. Meines Wissens nach muss dass in die 
Funktion eingabeDatum einfügen, aber wenn ich das in die Funktion 
schreibe wird der Code nicht ausgeführt bzw. gibt der Compilier mir 
fehler aus !

Hier mein Code:
#include <stdio.h>

void eingabeDatum(void) {
    int eingabeDatum();
    printf("\nBitte geben Sie das Zulassungsdatum ein (in der Form 
tt.mm.jj:");
    scanf("%d", &eingabeDatum);
}


int main () {
    eingabeDatum();
    return 0;
}

: Bearbeitet durch User
von Adam P. (adamap)


Lesenswert?

Du meinst eher das:
1
#include <stdio.h>
2
3
void eingabeDatum(void) {
4
    int eingabe;
5
6
    printf("\nBitte geben Sie das Zulassungsdatum ein (in der Form tt.mm.jj:");
7
    scanf("%d", &eingabe);
8
    
9
    printf("Eingegeben wurde: %d\n", eingabe);
10
}
11
12
13
int main () {
14
    eingabeDatum();
15
    return 0;
16
}

Aber so wird das nicht funktionieren...da er nur die erste Zahl 
einliest, alles nach dem ersten Punkt wird ignoriert.

Da du ja auch in einen Integer Variable einliest.

Sonst:
1
#include <stdio.h>
2
3
void eingabeDatum(void) {
4
    char eingabe[9];   // 9 weil 8 Zeichen + abschliessende '\0'
5
    
6
    printf("\nBitte geben Sie das Zulassungsdatum ein (in der Form tt.mm.jj:");
7
    scanf("%s", eingabe);
8
    
9
    printf("%s\n", eingabe);
10
}
11
12
13
int main () {
14
    eingabeDatum();
15
    return 0;
16
}


Oder mit mehreren Variablen
1
void eingabeDatum(void) {
2
    int tag, monat, jahr;
3
    
4
    printf("\nBitte geben Sie das Zulassungsdatum ein (in der Form tt.mm.jj:");
5
    scanf("%d.%d.%d", &tag, &monat, &jahr);
6
    
7
    printf("%d.%d.%d", tag, monat, jahr);
8
}

: Bearbeitet durch User
von Wado U. (racole)


Lesenswert?

> Aber so wird das nicht funktionieren...da er nur die erste Zahl
> einliest, alles nach dem ersten Punkt wird ignoriert.
>
ja hast recht, aber ich Brauche später sowieso nur die Jahreszahl, da 
ich das Alter berechnen möchte.

Wie kann ich denn es so machen dass er nur die Jahreszahl betrachtet und 
Datum und MOnat nicht ?
Mit mehreren VAriablen müsste ich dass codieren oder ?

: Bearbeitet durch User
von Adam P. (adamap)


Lesenswert?

Wado U. schrieb:
> Mit mehreren VAriablen müsste ich dass codieren oder ?

hat sich wohl überschnitten...schau mal ganz unten in meinem Beitrag, 
hatte das nachträglich hinzugefügt.

von Rolf M. (rmagnus)


Lesenswert?

Adam P. schrieb:
> char eingabe[9];   // 9 weil 8 Zeichen + abschliessende '\0'
>
>     printf("\nBitte geben Sie das Zulassungsdatum ein (in der Form
> tt.mm.jj:");
>     scanf("%s", eingabe);

Aber wehe, jemand kommt auf die Idee, ein Zeichen mehr einzugeben.

Wado U. schrieb:
>> Aber so wird das nicht funktionieren...da er nur die erste Zahl
>> einliest, alles nach dem ersten Punkt wird ignoriert.
>>
> ja hast recht, aber ich Brauche später sowieso nur die Jahreszahl, da
> ich das Alter berechnen möchte.
>
> Wie kann ich denn es so machen dass er nur die Jahreszahl betrachtet und
> Datum und MOnat nicht ?

Warum bittest du den Benutzer überhaupt, Tag und Monat einzugeben, wenn 
du die danach sowieso verwerfen willst?

von Adam P. (adamap)


Lesenswert?

Rolf M. schrieb:
> Aber wehe, jemand kommt auf die Idee, ein Zeichen mehr einzugeben.

Da hast du 100% recht... sichere Eingabe würde ich eh nicht mit scanf 
machen.

: Bearbeitet durch User
Beitrag #6521580 wurde von einem Moderator gelöscht.
von Adam P. (adamap)


Lesenswert?

Wado U. schrieb:
> aber ich Brauche später sowieso nur die Jahreszahl, da
> ich das Alter berechnen möchte.

Na nur mit der Jahreszahl wird es nicht reichen.

Bsp.:
Geboren am 22.12.2020

Eingabe erfolgt am 01.01.2021

Dann wäre das Ergebnis 2021 - 2020 = 1 (mh...irgendwie falsch, oder?)

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Wado U. schrieb:
> int eingabeDatum();

Das ist eine Funktionsdeklaration.
- Funktion wegen der runden Klammern.
- Deklaration, weil kein Code kommt sonder mit ; abgeschlossen wird

Diese braucht man, bevor die Funktion das erste mal aufgerufen wird.

Eine Definition (also der Funktionscode) ist auch gleichzeitig eine 
Deklaration. Da du die Funktion vor dem Aufruf in main() definierst, ist 
die extra Deklaration nicht nötig.

Und C ist nicht Pascal. Der Rückgabewert hat nicht den Funktionsnamen.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

wie wärs mit:
char s[9];
scanf("%8s",s)

?

von PittyJ (Gast)


Lesenswert?

Das ist schon der dritte Post mit stümperhaftem Anfängercode.
Wie wäre es, erst einmal ein Lehrbuch durchzuarbeiten. Die Beispiele 
darin auszuprobieren und Teile einfach mal im Einzelschritt sich 
anzuschauen.

Generation von Programmierern haben es so gelernt. Nur mit einem Buch. 
Ganz ohne Internet.

Einfach immer 5 fehlerhafte Zeilen zu posten, damit kommt man nicht 
weiter.
Und die Leute hier sind irgendwann von Anfängern, die sich nicht mal 
selber helfen können, genervt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.