In 'fr.comp.lang.c', AG wrote:Voilà je continue les exercices de mon bouquin de C.
J'en suis au chapitre concernant les structures et ils demandent de créer
une structure contenant le temps et la date. (Puis de calculer l'espace
entre deux temps en minutes).
J'aurais naturellement utilisé time() qui donne le temps, plutot que de
parser une chaine. (mais c'est un autre exercice).
Rien à voir avec la question posée...
In 'fr.comp.lang.c', AG <AG@tb.fr> wrote:
Voilà je continue les exercices de mon bouquin de C.
J'en suis au chapitre concernant les structures et ils demandent de créer
une structure contenant le temps et la date. (Puis de calculer l'espace
entre deux temps en minutes).
J'aurais naturellement utilisé time() qui donne le temps, plutot que de
parser une chaine. (mais c'est un autre exercice).
Rien à voir avec la question posée...
In 'fr.comp.lang.c', AG wrote:Voilà je continue les exercices de mon bouquin de C.
J'en suis au chapitre concernant les structures et ils demandent de créer
une structure contenant le temps et la date. (Puis de calculer l'espace
entre deux temps en minutes).
J'aurais naturellement utilisé time() qui donne le temps, plutot que de
parser une chaine. (mais c'est un autre exercice).
Rien à voir avec la question posée...
Bonjour, Bonsoir,
Voilà je continue les exercices de mon bouquin de C.
J'en suis au chapitre concernant les structures et ils demandent de créer
une structure contenant le temps et la date. (Puis de calculer l'espace
entre deux temps en minutes).
Ma question est :
Est-il mieux de demander à l'utilisateur de rentrer la date comme ceci :
- mm/jj/aaaa
Puis de prendre les valeurs mm et jj, avec un srtoi (C99) ou un strtod
(Ansi) quit à caster en int après, et de les vérifier. Ou
- mm jj aaaa
Puis de prendre après les valeurs à l'aide d'un sscanf(input,"%d %d %d",
...) pour les vérifier après.
Et pour le temps vous avez une idée ?
J'ai pensé que la méthode 88:88 serait pas mal mais si vous avez une autre
idée ;).
Merci,
Voila ;),
ThE_TemPLaR
Salut,
Bonjour, Bonsoir,
Voilà je continue les exercices de mon bouquin de C.
J'en suis au chapitre concernant les structures et ils demandent de créer
une structure contenant le temps et la date. (Puis de calculer l'espace
entre deux temps en minutes).
Ma question est :
Est-il mieux de demander à l'utilisateur de rentrer la date comme ceci :
- mm/jj/aaaa
Puis de prendre les valeurs mm et jj, avec un srtoi (C99) ou un strtod
(Ansi) quit à caster en int après, et de les vérifier. Ou
- mm jj aaaa
Puis de prendre après les valeurs à l'aide d'un sscanf(input,"%d %d %d",
...) pour les vérifier après.
Et pour le temps vous avez une idée ?
J'ai pensé que la méthode 88:88 serait pas mal mais si vous avez une autre
idée ;).
Merci,
Voila ;),
ThE_TemPLaR
Salut,
Bonjour, Bonsoir,
Voilà je continue les exercices de mon bouquin de C.
J'en suis au chapitre concernant les structures et ils demandent de créer
une structure contenant le temps et la date. (Puis de calculer l'espace
entre deux temps en minutes).
Ma question est :
Est-il mieux de demander à l'utilisateur de rentrer la date comme ceci :
- mm/jj/aaaa
Puis de prendre les valeurs mm et jj, avec un srtoi (C99) ou un strtod
(Ansi) quit à caster en int après, et de les vérifier. Ou
- mm jj aaaa
Puis de prendre après les valeurs à l'aide d'un sscanf(input,"%d %d %d",
...) pour les vérifier après.
Et pour le temps vous avez une idée ?
J'ai pensé que la méthode 88:88 serait pas mal mais si vous avez une autre
idée ;).
Merci,
Voila ;),
ThE_TemPLaR
Salut,
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
Dans ce cas pourquoi ne pas utiliser directement fscanf() ?
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
Dans ce cas pourquoi ne pas utiliser directement fscanf() ?
if ( sscanf(input,"%d/%d/%d", &month, &day, &year) != 3 )
Dans ce cas pourquoi ne pas utiliser directement fscanf() ?
Merci beaucoup pour toutes vos réponses, j'ai opté pour la solution :
fgets(input, (int) sizeof(input), stdin);
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
{
....
}
Car elle me parait la plus simple, la plus rapide et la plus efficace.
Le problème est que si la personne entre 0005, je n'ai aucun moyen de le
savoir et de l'arrêter, ce qui fait que la date peut dépasser la longueur
autorisée : mm.
Sinon le problème qui se pose c'est pour vérifier la date.
Y'a bien la méthode :
if ( ( month == 6 ) && ( ( day < 1 ) || ( day > 30 ) )
{
....
err = EXIT_FAILURE;
}
else if...
switch(month)
{
....
case 6 : if ( ( day < 1 ) || ( day > 30 )
...
break;
....
}
Mais ça semble assez long, si quelqu'un à une autre idée.
Moi, ca me parait bien. Y'a pas tant de mois differents. En admettant:
Merci beaucoup pour toutes vos réponses, j'ai opté pour la solution :
fgets(input, (int) sizeof(input), stdin);
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
{
....
}
Car elle me parait la plus simple, la plus rapide et la plus efficace.
Le problème est que si la personne entre 0005, je n'ai aucun moyen de le
savoir et de l'arrêter, ce qui fait que la date peut dépasser la longueur
autorisée : mm.
Sinon le problème qui se pose c'est pour vérifier la date.
Y'a bien la méthode :
if ( ( month == 6 ) && ( ( day < 1 ) || ( day > 30 ) )
{
....
err = EXIT_FAILURE;
}
else if...
switch(month)
{
....
case 6 : if ( ( day < 1 ) || ( day > 30 )
...
break;
....
}
Mais ça semble assez long, si quelqu'un à une autre idée.
Moi, ca me parait bien. Y'a pas tant de mois differents. En admettant:
Merci beaucoup pour toutes vos réponses, j'ai opté pour la solution :
fgets(input, (int) sizeof(input), stdin);
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
{
....
}
Car elle me parait la plus simple, la plus rapide et la plus efficace.
Le problème est que si la personne entre 0005, je n'ai aucun moyen de le
savoir et de l'arrêter, ce qui fait que la date peut dépasser la longueur
autorisée : mm.
Sinon le problème qui se pose c'est pour vérifier la date.
Y'a bien la méthode :
if ( ( month == 6 ) && ( ( day < 1 ) || ( day > 30 ) )
{
....
err = EXIT_FAILURE;
}
else if...
switch(month)
{
....
case 6 : if ( ( day < 1 ) || ( day > 30 )
...
break;
....
}
Mais ça semble assez long, si quelqu'un à une autre idée.
Moi, ca me parait bien. Y'a pas tant de mois differents. En admettant:
fgets(input, (int) sizeof(input), stdin);
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
{
...
}
Car elle me parait la plus simple, la plus rapide et la plus efficace.
Le problème est que si la personne entre 0005, je n'ai aucun moyen de le
savoir et de l'arrêter, ce qui fait que la date peut dépasser la longueur
autorisée : mm.
Sinon le problème qui se pose c'est pour vérifier la date.
Y'a bien la méthode :
if ( ( month == 6 ) && ( ( day < 1 ) || ( day > 30 ) )
{
...
err = EXIT_FAILURE;
}
else if...
switch(month)
{
...
case 6 : if ( ( day < 1 ) || ( day > 30 )
...
break;
...
}
fgets(input, (int) sizeof(input), stdin);
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
{
...
}
Car elle me parait la plus simple, la plus rapide et la plus efficace.
Le problème est que si la personne entre 0005, je n'ai aucun moyen de le
savoir et de l'arrêter, ce qui fait que la date peut dépasser la longueur
autorisée : mm.
Sinon le problème qui se pose c'est pour vérifier la date.
Y'a bien la méthode :
if ( ( month == 6 ) && ( ( day < 1 ) || ( day > 30 ) )
{
...
err = EXIT_FAILURE;
}
else if...
switch(month)
{
...
case 6 : if ( ( day < 1 ) || ( day > 30 )
...
break;
...
}
fgets(input, (int) sizeof(input), stdin);
if ( sscanf(input,"%d/%d/%d", &month, &day, &year != 3 )
{
...
}
Car elle me parait la plus simple, la plus rapide et la plus efficace.
Le problème est que si la personne entre 0005, je n'ai aucun moyen de le
savoir et de l'arrêter, ce qui fait que la date peut dépasser la longueur
autorisée : mm.
Sinon le problème qui se pose c'est pour vérifier la date.
Y'a bien la méthode :
if ( ( month == 6 ) && ( ( day < 1 ) || ( day > 30 ) )
{
...
err = EXIT_FAILURE;
}
else if...
switch(month)
{
...
case 6 : if ( ( day < 1 ) || ( day > 30 )
...
break;
...
}
Oublie fscanf() pour des entrées utilisateur, ce n'est pas
fait pour cela (et je n'ai aucune idée de pourquoi scanf()
peut bien exister).
Oublie fscanf() pour des entrées utilisateur, ce n'est pas
fait pour cela (et je n'ai aucune idée de pourquoi scanf()
peut bien exister).
Oublie fscanf() pour des entrées utilisateur, ce n'est pas
fait pour cela (et je n'ai aucune idée de pourquoi scanf()
peut bien exister).
Moi, ca me parait bien. Y'a pas tant de mois differents. En admettant:
int day, month, year;
enum
{
JAN = 1,
FEV,
MAR,
AVR,
MAI,
JUN,
JUI,
AOU,
SEP,
OCT,
NOV,
DEC
};
switch (month)
{
case JAN:
case MAR:
case MAI:
case JUI:
case AOU:
case OCT:
case DEC:
if ((0 < day) || (day <= 31))
{
/* err: mauvais jour */
}
break;
case FEV:
if ((0 < day) || (day <= 28))
{
/* err: mauvais jour */
}
break;
case AVR:
case JUN:
case SEP:
case NOV:
if ((0 < day) || (day <= 30))
{
/* err: mauvais jour */
}
break;
default:
/*err: mauvais mois */
break;
}
non ?
Moi, ca me parait bien. Y'a pas tant de mois differents. En admettant:
int day, month, year;
enum
{
JAN = 1,
FEV,
MAR,
AVR,
MAI,
JUN,
JUI,
AOU,
SEP,
OCT,
NOV,
DEC
};
switch (month)
{
case JAN:
case MAR:
case MAI:
case JUI:
case AOU:
case OCT:
case DEC:
if ((0 < day) || (day <= 31))
{
/* err: mauvais jour */
}
break;
case FEV:
if ((0 < day) || (day <= 28))
{
/* err: mauvais jour */
}
break;
case AVR:
case JUN:
case SEP:
case NOV:
if ((0 < day) || (day <= 30))
{
/* err: mauvais jour */
}
break;
default:
/*err: mauvais mois */
break;
}
non ?
Moi, ca me parait bien. Y'a pas tant de mois differents. En admettant:
int day, month, year;
enum
{
JAN = 1,
FEV,
MAR,
AVR,
MAI,
JUN,
JUI,
AOU,
SEP,
OCT,
NOV,
DEC
};
switch (month)
{
case JAN:
case MAR:
case MAI:
case JUI:
case AOU:
case OCT:
case DEC:
if ((0 < day) || (day <= 31))
{
/* err: mauvais jour */
}
break;
case FEV:
if ((0 < day) || (day <= 28))
{
/* err: mauvais jour */
}
break;
case AVR:
case JUN:
case SEP:
case NOV:
if ((0 < day) || (day <= 30))
{
/* err: mauvais jour */
}
break;
default:
/*err: mauvais mois */
break;
}
non ?