2016-02-06 1 views
0

Je suis nouveau C, étudie actuellement sur cours de CS50 sur edx.org (cette tâche est pas de cours de CS50).Comment obtenir une entrée de l'utilisateur en tant que tableau d'entiers en C?

j'ai écrit le programme qui demande à l'utilisateur une date de naissance, et calcule ensuite un âge actuel en fonction de la date du système.

Maintenant, je reçois des valeurs de l'utilisateur de cette façon (GetInt() et GetString() sont des fonctions de cs50.h en-tête et bibliothèque).

// Ask user for his name, and date of birth 

printf("Enter your name: "); 
char* name = GetString(); 

printf("Enter your day of birth: "); 
int birth_day = GetInt(); 

printf("Enter your month of birth: "); 
int birth_month = GetInt(); 

printf("Enter your year of birth: "); 
int birth_year = GetInt(); 

Mais je ne veux pas demander à l'utilisateur 3 fois pour obtenir une date à laquelle il peut entrer une seule ligne - 18/06/1985 par exemple. Donc la question est - comment obtenir l'entrée de l'utilisateur au format DD.MM.AAAA, puis stockez-le dans le tableau des entiers, comme [0, 1, 2], donc je serais capable d'accéder à ces valeurs séparément plus tard?

+0

Vous pouvez utiliser une chaîne pour recevoir des entrées et tokenizer alors et stocker la valeur dans des variables entières. – ameyCU

+0

Merci, mais comment le faire? Existe-t-il un moyen plus direct d'utiliser scanf ou quelque chose? –

Répondre

1

Créer une struct pour obtenir que:

typedef struct { 
    int day; 
    int month; 
    int year; 
} birthDay; 

Lorsque vous allez demander à l'utilisateur, vous pouvez le faire:

int day, month, year; 
printf("Type your birthday (day month year): "); 
scanf("%d %d %d", &day, &month, &year); 

Maintenant, vous pouvez configurer votre struct correctement.

birthday bday; 
bday.day = day; 
bday.month = month; 
bday.year = year; 
+0

Merci, cela aide! Je ne savais pas comment utiliser scanf() propertly –

+1

Notez que vous devez vérifier la valeur de retour de 'scanf': si l'utilisateur a donné bonne entrée, 3 numéros éventuellement séparés par un espace blanc, la valeur de retour sera 3, sinon, certaines des variables 'day',' month', year' peuvent ne pas avoir été définies. – chqrlie

2

Vous pouvez effectuer les opérations suivantes:

int array[3]; 
scanf("%d.%d.%d", &array[0], &array[1], &array[2]); 

Sur une entrée 18.06.1990, tableau [0] contiendra 18, tableau [1] contiendra 6 et tableau [2] aura 1990.

+0

Merci, c'est aussi vrai, mais si cela fonctionne, je n'ai même pas besoin d'un tableau! –

+0

N'oubliez pas de vérifier que 'scanf()' a renvoyé '3' avant d'utiliser les valeurs. (. @NikitaK - vous avez raison que vous ne devez pas utiliser un tableau, vous pouvez utiliser toutes les trois variables distinctes.) La vie devient plus intéressante si vous voulez faire preuve de souplesse sur le format de la date, de sorte que vous souhaitez autoriser DD/MM/AAAA et JJ MM AAAA, ainsi que le format JJ.MM.AAAA (et encore plus intéressant si vous voulez autoriser DDMMYYYY - et encore moins AAAA-MM-JJ aussi, ou MM/JJ/AAAA, ou ...) Les dates sont divertissant sans fin (pour une très faible qualité de divertissement). –