Was soll denn hinterher in deiner Variable stehen? Unsigned und Datum passen irgendwie nicht zusammen (Guck mal die Typen in der time.h an). Und brauchst du den Zwischenschritt über die Zeichenkette überhaupt? So wie es jetzt aussieht, soll hinterher die Variablen den Wert des Tages, Monats und des Jahres haben. Das geht doch auch direkt mit:
#include<stdio.h>
int main()
{
unsigned day, month, year;
puts("Datum?");
if (scanf("%u.%u.%u", &day, &month, &year) == 3)
printf("Tag als unsigned: %u\nMonat als unsigned: %u\nJahr als unsigned: %u\n",
day, month, year);
else
puts("Das war kein gültiges Datum.");
}
Das kannst du natürlich auch mittels sscanf mit deiner Zeichenkette als Quelle anstatt der Standardeingabe machen.
Aber was soll das hinterher werden? Wie schon gesagt, gibt es in C bereits fertige Datumsfunktionen und die verwenden andere Datentypen. Es sieht momentan ein bisschen so aus, als würdest du die Standardbibliothek nachprogrammieren.
P.S.: Und warum dein Programm nicht funktioniert: Du hast den Unterschied zwischen der Repräsentation einer Zahl (hier als Zeichenkette) und dem Wert einer Zahl (im mathematischen Sinne) nicht verstanden. Oder du verstehst den Unterschied, aber kannst ihn nicht in C formulieren. Dein answer ist eine Repräsentation, dein day ein Wert. Das kannst du in C nicht einfach mittels = umwandeln. Du brauchst dazu so Funktionen wie atoi oder die scanf-Familie. Deine Zuweisung day = answer[0]; compiliert, da answer[0] ein einzelnes Zeichen aus der Repräsentation ist und Zeichen sind in C auch nur Zahlen(werte). Du hast dann den Wert des ersten Zeichens (also bei ASCII 49, 50 und 51 für '1', '2' und '3') bekommen.
Dein Kommentar deutet darauf hin, dass du bloß wild rumprobiert hast, bis das Programm compilierte. Dazu zitiere ich gerne ein früheres Forenmitglied:
c.rackwitz schrieb:
Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.