Forum: PC-Programmierung Neu mit Funktionen in C


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wado U. (racole)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
-1 lesenswert
nicht lesenswert
wie wärs mit:
char s[9];
scanf("%8s",s)

?

von PittyJ (Gast)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.