Aide pour projet Automate !

Fermé
Bruttte Messages postés 2 Date d'inscription vendredi 4 décembre 2015 Statut Membre Dernière intervention 4 décembre 2015 - 4 déc. 2015 à 09:06
Bruttte Messages postés 2 Date d'inscription vendredi 4 décembre 2015 Statut Membre Dernière intervention 4 décembre 2015 - 4 déc. 2015 à 13:42
Bonjour a vous, j'ai un problème avec mon automate qui doit enfaîte afficher une date de manière "AAAA/MM/JJ HH/MM/SS", je pense que cela vient de la syntaxe mais je n'en suis pas sur donc il ne marche pas mais je ne sais pourquoi ... J'ai besoin d'aide svp merci Voici le Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
char c[15];
int state=10;
fgets(c,15,stdin);
while(1){
switch (state){

case 10:
if('84'==c[0]||'72'==c[0]||'76'==c[0]||'60'==c[0]||'68'==c[0]||'64'==c[0]||'56'==c[0]||'52'==c[0]||'44'==c[0]||'48'==c[0]||'36'==c[0]||'32'==c[0]||'24'==c[0]||'28'==c[0]||'20'==c[0]||'12'==c[0]||'16'==c[0]||'92'==c[0]||'96'==c[0]||'88'==c[0])
state=11;
else if ('30'==c[0]||'31'==c[0]||'23'==c[0]||'22'==c[0]||'25'==c[0]||'27'==c[0]||'26'==c[0]||'29'==c[0]||'41'==c[0]||'40'==c[0]||'43'==c[0]||'42'==c[0]||'34'==c[0]||'33'==c[0]||'35'==c[0]||'38'==c[0]||'37'==c[0]||'39'==c[0]||'10'==c[0]||'21'==c[0]||'11'==c[0]||'14'==c[0]||'13'==c[0]||'15'==c[0]||'18'==c[0]||'17'==c[0]||'19'==c[0]||'70'==c[0]||'71'==c[0]||'74'==c[0]||'73'==c[0]||'75'==c[0]||'67'==c[0]||'66'==c[0]||'69'==c[0]||'81'==c[0]||'80'==c[0]||'83'==c[0]||'82'==c[0]||'85'==c[0]||'87'==c[0]||'86'==c[0]||'78'==c[0]||'77'==c[0]||'79'==c[0]||'50'==c[0]||'51'==c[0]||'54'==c[0]||'53'==c[0]||'45'==c[0]||'47'==c[0]||'46'==c[0]||'49'==c[0]||'61'==c[0]||'62'==c[0]||'63'==c[0]||'65'==c[0]||'55'==c[0]||'58'==c[0]||'57'==c[0]||'59'==c[0]||'90'==c[0]||'91'==c[0]||'94'==c[0]||'93'==c[0]||'95'==c[0]||'98'==c[0]||'97'==c[0]||'89'==c[0]||'99'==c[0])
state=12;
else
state=-1;
break;

case 11:
if('96'==c[1]||'92'==c[1]||'88'==c[1]||'84'==c[1]||'80'==c[1]||'76'==c[1]||'72'==c[1]||'68'==c[1]||'64'==c[1]||'60'==c[1]||'56'==c[1]||'52'==c[1]||'48'==c[1]||'44'==c[1]||'40'==c[1]||'36'==c[1]||'32'==c[1]||'28'==c[1]||'24'==c[1]||'20'==c[1]||'16'==c[1]||'12'==c[1]||'04'==c[1]||'00'==c[1]||'08'==c[1])
state=13;
else if('09'==c[1]||'05'==c[1]||'06'==c[1]||'07'==c[1]||'01'==c[1]||'02'==c[1]||'03'==c[1]||'10'==c[1]||'19'==c[1]||'15'==c[1]||'17'==c[1]||'18'==c[1]||'11'==c[1]||'13'==c[1]||'14'==c[1]||'21'==c[1]||'26'==c[1]||'27'==c[1]||'29'==c[1]||'22'==c[1]||'23'==c[1]||'25'==c[1]||'30'==c[1]||'31'==c[1]||'37'==c[1]||'38'==c[1]||'39'==c[1]||'33'==c[1]||'34'==c[1]||'35'==c[1]||'41'==c[1]||'42'==c[1]||'43'==c[1]||'49'==c[1]||'45'==c[1]||'46'==c[1]||'47'==c[1]||'51'==c[1]||'53'==c[1]||'54'==c[1]||'50'==c[1]||'59'==c[1]||'55'==c[1]||'57'==c[1]||'58'==c[1]||'62'==c[1]||'63'==c[1]||'65'==c[1]||'61'==c[1]||'66'==c[1]||'67'==c[1]||'69'==c[1]||'73'==c[1]||'74'==c[1]||'75'==c[1]||'70'==c[1]||'71'==c[1]||'77'==c[1]||'78'==c[1]||'79'==c[1]||'85'==c[1]||'86'==c[1]||'87'==c[1]||'81'==c[1]||'82'==c[1]||'83'==c[1]||'89'==c[1]||'95'==c[1]||'97'==c[1]||'98'==c[1]||'91'==c[1]||'93'==c[1]||'94'==c[1]||'90'==c[1]||'99'==c[1])
state=14;
else
state=-1;
break;

case 12:
if('96'==c[1]||'92'==c[1]||'88'==c[1]||'32'==c[1]||'28'==c[1]||'24'==c[1]||'40'==c[1]||'36'==c[1]||'08'==c[1]||'04'==c[1]||'20'==c[1]||'16'==c[1]||'12'==c[1]||'76'==c[1]||'72'==c[1]||'68'==c[1]||'84'==c[1]||'80'==c[1]||'52'==c[1]||'48'==c[1]||'44'==c[1]||'64'==c[1]||'60'==c[1]||'56'==c[1])
state=13;
else if('59'==c[1]||'57'==c[1]||'55'==c[1]||'58'==c[1]||'62'==c[1]||'63'==c[1]||'65'==c[1]||'61'==c[1]||'49'==c[1]||'45'==c[1]||'46'==c[1]||'47'==c[1]||'51'==c[1]||'53'==c[1]||'54'==c[1]||'50'==c[1]||'77'==c[1]||'78'==c[1]||'79'==c[1]||'85'==c[1]||'86'==c[1]||'87'==c[1]||'81'==c[1]||'82'==c[1]||'83'==c[1]||'66'==c[1]||'67'==c[1]||'69'==c[1]||'73'==c[1]||'74'==c[1]||'75'==c[1]||'70'==c[1]||'71'==c[1]||'15'==c[1]||'17'==c[1]||'18'==c[1]||'11'==c[1]||'13'==c[1]||'14'==c[1]||'19'==c[1]||'21'==c[1]||'05'==c[1]||'06'==c[1]||'07'==c[1]||'00'==c[1]||'01'==c[1]||'02'==c[1]||'03'==c[1]||'09'==c[1]||'10'==c[1]||'37'==c[1]||'38'==c[1]||'39'==c[1]||'33'==c[1]||'34'==c[1]||'35'==c[1]||'41'==c[1]||'42'==c[1]||'43'==c[1]||'26'==c[1]||'27'==c[1]||'29'==c[1]||'22'==c[1]||'23'==c[1]||'25'==c[1]||'30'==c[1]||'31'==c[1]||'99'==c[1]||'89'==c[1]||'90'==c[1]||'95'==c[1]||'97'==c[1]||'98'==c[1]||'91'==c[1]||'93'==c[1]||'94'==c[1])
state=14;
else
state=-1;
break;

case 13:
if('/'==c[2])
state=15;
else
state=-1;
break;

case 14:
if('/'==c[2])
state=16;
else
state=-1;
break;

case 15:
if('10'==c[3]||'01'==c[3]||'03'==c[3]||'05'==c[3]||'07'==c[3]||'08'==c[3]||'12'==c[3]||'aug'==c[3]||'jan'==c[3]||'jul'==c[3]||'dec'==c[3]||'oct'==c[3]||'mar'==c[3]||'may'==c[3])
state=17;
else if('jun'==c[3]||'sep'==c[3]||'nov'==c[3]||'apr'==c[3]||'11'==c[3]||'06'==c[3]||'04'==c[3]||'09'==c[3])
state=18;
else if('feb'==c[3]||'02'==c[3])
state=19;
else
state=-1;
break;

case 16:
if('jul'==c[3]||'dec'==c[3]||'mar'==c[3]||'may'==c[3]||'oct'==c[3]||'aug'==c[3]||'08'==c[3]||'07'==c[3]||'05'==c[3]||'03'==c[3]||'01'==c[3]||'10'==c[3]||'jan'==c[3]||'12'==c[3])
state=17;
else if('nov'==c[3]||'11'==c[3]||'apr'==c[3]||'09'==c[3]||'04'==c[3]||'06'==c[3]||'jun'==c[3]||'sep'==c[3])
state=18;
else if('feb'==c[3]||'02'==c[3])
state=20;
else
state=-1;
break;

case 17:
if('/'==c[4])
state=21;
else
state=-1;
break;

case 18:
if('/'==c[4])
state=22;
else
state=-1;
break;

case 19:
if('/'==c[4])
state=23;
else
state=-1;
break;

case 20:
if('/'==c[4])
state=24;
else
state=-1;
break;

case 21:
if('2'==c[5]||'1'==c[5]||'0'==c[5])
state=25;
else if('10'==c[6]||'20'==c[6])
state=99;
else if('3'==c[5])
state=27;
else
state=-1;
break;

case 22:
if('1'==c[5]||'0'==c[5]||'2'==c[5])
state=28;
else if('10'==c[6]||'20'==c[6]||'30'==c[6])
state=98;
else
state=-1;
break;

case 23:
if('0'==c[5]||'1'==c[5]||'2'==c[5])
state=30;
else if('10'==c[6]||'20'==c[6])
state=97;
else
state=-1;
break;

case 24:
if('0'==c[5]||'1'==c[5])
state=32;
else if('10'==c[6])
state=96;
else if('2'==c[5])
state=33;
else
state=-1;
break;

case 25:
if('1'==c[6]||'2'==c[6]||'3'==c[6]||'4'==c[6]||'5'==c[6]||'6'==c[6]||'7'==c[6]||'8'==c[6]||'9'==c[6])
state=99;
else
state=-1;
break;

case 27:
if('0'==c[6]||'1'==c[6])
state=99;
else
state=-1;
break;

case 28:
if('1'==c[6]||'2'==c[6]||'3'==c[6]||'4'==c[6]||'5'==c[6]||'6'==c[6]||'7'==c[6]||'8'==c[6]||'9'==c[6])
state=98;
else
state=-1;
break;

case 30:
if('1'==c[6]||'2'==c[6]||'3'==c[6]||'4'==c[6]||'5'==c[6]||'6'==c[6]||'7'==c[6]||'8'==c[6]||'9'==c[6])
state=97;
else
state=-1;
break;

case 32:
if('1'==c[6]||'2'==c[6]||'3'==c[6]||'4'==c[6]||'5'==c[6]||'6'==c[6]||'7'==c[6]||'8'==c[6]||'9'==c[6])
state=96;
else
state=-1;
break;

case 33:
if('1'==c[6]||'2'==c[6]||'3'==c[6]||'4'==c[6]||'5'==c[6]||'6'==c[6]||'7'==c[6]||'8'==c[6]||'9'==c[6])
state=96;
else
state=-1;
break;

case 99:
if(' '==c[7])
state=61;
else
state=-1;
break;

case 98:
if(' '==c[7])
state=61;
else
state=-1;
break;

case 97:
if(' '==c[7])
state=61;
else
state=-1;
break;

case 96:
if(' '==c[7])
state=61;
else
state=-1;
break;

case 61:
if('0'==c[8])
state=62;
else if('1'==c[8])
state=69;
else
state=-1;
break;

case 62:
if('0'==c[9]||'1'==c[9]||'2'==c[9]||'3'==c[9]||'4'==c[9]||'5'==c[9]||'6'==c[9]||'7'==c[9]||'8'==c[9]||'9'==c[9])
state=95;
else
state=-1;
break;

case 69:
if('0'==c[9]||'1'==c[9]||'2'==c[9])
state=95;
else
state=-1;
break;

case 95:
if(':'==c[10])
state=71;
else
state=-1;
break;

case 71:
if('0'==c[11]||'1'==c[11]||'2'==c[11]||'3'==c[11]||'4'==c[11]||'5'==c[11])
state=72;
else
state=-1;
break;

case 72:
if('0'==c[12]||'1'==c[12]||'2'==c[12]||'3'==c[12]||'4'==c[12]||'5'==c[12]||'6'==c[12]||'7'==c[12]||'8'==c[12]||'9'==c[12])
state=94;
else
state=-1;
break;

case 94:
if(':'==c[13])
state=74;
else
state=-1;
break;

case 74:
if('0'==c[14]||'1'==c[14]||'2'==c[14]||'3'==c[14]||'4'==c[14]||'5'==c[14])
state=75;
else
state=-1;
break;

case 75:
if('0'==c[15]||'1'==c[15]||'2'==c[15]||'3'==c[15]||'4'==c[15]||'5'==c[15]||'6'==c[15]||'7'==c[15]||'8'==c[15]||'9'==c[15]){
state=76;
printf("date ok\n");
return 0;
}
else
state=-1;
break;
default :
printf("etape non definie!\n");
return 0;
break;
}
}
}

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 4/12/2015 à 12:21
Salut Bruttte,

En C les apostrophes sont un délimiteur permettant de représenter un caractère littéral.

Par exemple 'A', '1', '\0' sont des représentations valables.

Visiblement tu compares le contenu d'une saisie de chars avec fgets à quelque chose de numérique. S'il s'agit du code ASCII, il faut retirer les apostrophes. En fait, tu compares des nombres.

Si tu veux utiliser les apostrophes pour représenter tes tests, ce sont des chars que tu vas représenter et pas leur valeur numérique ASCII. Par exemple pour tester si un char est dans la première partie de l'alphabet en minuscules, tu peux représenter valablement le test de la façon suivante :
if (c>= 'a' && c<='m') {
(..)

Sur un autre plan, je sais pas ce que tu essayes de faire, mais ce switch gigantesque avec toutes ces conditions me semble un nid à bogues et horrible à lire, comprendre et maintenir. Il y a sûrement des choses plus lisibles à faire pour réaliser tous ces tests, à commencer par utiliser les opérateurs <= ou >= pour les tests de valeurs consécutives.

Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
4 déc. 2015 à 12:50
et .. si en fait ce que tu veux faire, c'est comparer des chaînes de caractères littérales au contenu de la saisie récupérée avec fgets, les chaînes littérales sont délimitées par des guillemets en C, comme cela :
"Hello world"
et tu ne peux pas utiliser l'opérateur
==
qui ne va tester que des nombres.

c'est alors vers des fonctions accessibles dans string.h que tu devrais te tourner :

http://www.cplusplus.com/reference/cstring/

ou implémenter une fonction toi même qui va comparer les séquences de caractères de la façon que tu souhaites.
0
Bruttte Messages postés 2 Date d'inscription vendredi 4 décembre 2015 Statut Membre Dernière intervention 4 décembre 2015
4 déc. 2015 à 13:42
Je te remercie de ta réponse je vais tester !
0