struct tm verwenden

Manda

Erfahrenes Mitglied
Hallo Leute, das Problem hat sich erledigt. Ich kann jetzt auch von der Liste die Daten suchen lassen. Funktioniert soweit alles.
Hätte da noch eine Frage zum struct tm (muss das Datum dadurch einlesen).
Ich geb mal den Code vor:
Mein Struct:
C++:
struct prufung
{
	char veranstaltung[MAX];
	int punkte;
	char datum[MAX];
	char professor[MAX];
	struct prufung *next;
};

Hier lese ich die Prüfungen ein:
C++:
do
		{
			printf("\nVeranstaltung: ");
			scanf("%s", veranstaltung);
	
			printf("Punkte: ");
			scanf("%d", &punkte);
	
			printf("Datum [TTMMJJJJ]: ");
			scanf("%s", datum);

			printf("Professor: ");
			scanf("%s", professor);

			if(einfugenPrufung(veranstaltung, punkte, datum, professor, &start_pointer) != 0)
			{
				printf("\nFehler beim Hinzufuegen einer Pruefung");
				return 1;
			}		
			printf("\nWollen Sie weitere Pruefungen eingeben [j/n]?\n");
		}
		while(getch() == 'j');

Ich hab jetzt einfach nur ein char-array für das Datum genommen. Wollte erstmal nur, dass es läuft.
Nun zum Problem:
Das datum soll in dieser Form angegeben werden: Datum[TTMMYYYY]: 01022009
In der Ausgabe soll es aber Konvertiert werden, so: 01.02.2009
Wie kriege ich das mit dem struct tm hin?

Hier die Ausgabe:
C++:
void prufungAusgeben(prufung_t *start_pointer)
{
	struct prufung *ptr = start_pointer;
	
	printf("\n\n+-----------------------------------+");
	printf("\nAusgabe der Pruefungen eines Studenten:\n");
	while(ptr != NULL)
	{	
		printf("\nVeranstaltung: %s", ptr->veranstaltung);
		printf("\nPunkte       : %d", ptr->punkte);
		printf("\nDatum        : %s", ptr->datum);
		printf("\nProfessor    : %s", ptr->professor);
		printf("\n");
		ptr = ptr->next;
	}
}
Kann mir jemand mit dem struct tm helfen

Danke schonmal!
Gruß
Manda
 
Vielleicht hilft dir das:
Code:
char datum[MAX] = "31122008";
printf("%.2s.%.2s.%s", datum, &datum[2], &datum[4], &datum[6]);

Besser wäre allerdings, wenn das Datum direkt nach dem einlesen umgewandelt wird.

Viele Grüße
 
Danke für deine Antwort. Ich hab das mal probiert, aber irgendwie stürzt das Programm ab, sobald man das Datum ausgeben will.
In der Funktion void prufungAusgeben(prufung_t *start_pointer) greife ich ja mit dem Pointer auf den struct zu.
Müsste es dann nicht auch mit dem Pointer klappen? Wenn ich folgendes versuche:
C++:
printf("\nDatum        : %.2s.%.2s.%s", ptr->datum);
Meine Eingabe wäre: 11122009
Die Ausgabe ist: 11.% . " ->% und ", sind frei gewählte Zeichen, da kommen irgendwelche Zeichen vor (Herz, Smiley etc).
Er gibt also den Monat und das Jahr nicht richtig aus.
 
Es ist so, für jedes Formatierungszeichen, benötigt die Funktion printf eine Variable.
Wenn wir also "\nDatum : %.2s.%.2s.%s" als Ausgabe wollen, dann müssen wir auch 3 Variabeln "mitgeben".

Ouhh, gerade gesehen, dass eine Variable zu viel in meinem Beispiel hatte, ist deshalb warscheinlich abgestürzt.

Korrekt muss es in deinem Beispiel so aussehen:
C++:
printf("\nDatum        : %.2s.%.2s.%s", ptr->datum, &ptr->datum[2], &ptr->datum[4]);
 
@Bullja - Super Danke! Es klappt jetzt. Kannst du mir noch erklären warum du das hier machst: &ptr->datum[2] ?
Ich verstehe das "&" davor nicht ganz. Gibt man damit nicht adressen an? Sagst du jetzt, gib mir den Inhalt von der Adresse vom feld[2]?
Hoffe ich bring das gerade nicht so durch einandern.

Aber Danke für die Hilfe!

Gruß
Manda
 
Ich verstehe das "&" davor nicht ganz. Gibt man damit nicht adressen an? Sagst du jetzt, gib mir den Inhalt von der Adresse vom feld[2]?

Die printf-Funktion erwartet bei einem %s eine Adresse, bei welcher es beginnt, die Zeichen auszulesen und auf dem Bildschrim auszugeben.

Wir gehen davon aus, dass das Datum so im Speicher abgelegt ist: TTMMJJJJ
Wenn wir nun den Monat ausgeben lassen wollen, dann müssen wir der printf-Funktion die Adresse übergeben, bei welcher der Monat drinsteht: &datum[2].
 

Neue Beiträge

Zurück