Condition type char

Résolu
cs_Adict Messages postés 28 Date d'inscription vendredi 1 janvier 2010 Statut Membre Dernière intervention 10 août 2010 - 27 mars 2010 à 15:57
cs_Adict Messages postés 28 Date d'inscription vendredi 1 janvier 2010 Statut Membre Dernière intervention 10 août 2010 - 28 mars 2010 à 00:08
Bonjour

voila j'ai un problème :p

j'aime faire de petit programme pour m'entrainer et faire des challenges mais la je bloque
en gros j'aimerais faire comment dire ... une condition de type char.

voila se que j'ai fait pour le moment mais qui ne marche pas
se qui se passe c'est que si je rentre un nombre ou des caractères supérieure à 4 ça conte comme "bon"

normalement je doit aller sur "if" que si je tape "access" mais la si je tape (azerty) ou (12345) ça me dirige sur "if"
en revanche si je tape une petite chaine comme (aze) ou (123) cela va bien dans "else if"

#include <stdio.h>
#include <stdlib.h>
#include <FMOD/fmod.h>
#include <time.h>
#include <windows.h>
#include <string.h>

  
  
  void Color(int couleurDuTexte,int couleurDeFond);


int main(int argc, char *argv[])
{
 FSOUND_Init(44100, 32, 0);
FSOUND_SAMPLE *registr = NULL;
FSOUND_SAMPLE *hahha = NULL; 
registr = FSOUND_Sample_Load(FSOUND_FREE, "registrationcomplete.wav", 0, 0, 0);
hahha = FSOUND_Sample_Load(FSOUND_FREE, "hahha.wav", 0, 0, 0);
int compteur = 0;
Color(15,1);
printf("\nChargement du Challenge....\n");
    sleep(5000);
    system("cls");
    
    char acc = "access";

printf("******************************************************\n");
printf("*                                                    *\n");
printf("*             Systeme Administrator                  *\n");
printf("*                                                    *\n");
printf("******************************************************\n");

printf("\n\nWhat's the magic Word ??\n\n");
  
  scanf("%c", &acc);
 
  if (acc == "access")
          {
  system("CLS" );
  printf ("ok\n");
  FSOUND_PlaySound(FSOUND_FREE, registr);
  printf("\nLoading...\n");
  sleep(2000);
  system("CLS");
  printf("\npress ENTER\n");
  getch();
}

  
  else if (acc != "access")
  {
  system("CLS" ); 
  
  while (compteur < 30)
{
    printf("You didn't say the Magic word !!! HAHAHA !!!\n");
    compteur++;
}
    
FSOUND_PlaySound(FSOUND_FREE, hahha);
getch();
return 0;
  }
  system("CLS"); 
  
  /* 
instructions
*/
  
  
 getch();	
  FSOUND_Sample_Free(registr);
  FSOUND_Sample_Free(hahha);
 	FSOUND_Close();
  return 0;
}


void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}



_______________________________________________________________________
j'ai 16 ans et j'aime l'informatique, surtout les programmes

6 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
27 mars 2010 à 23:43
cd pointe sur chaine "cd Management".
Cesse de comparer cd et la chaine qu'il référence sinon le IF sera toujours bon.

Si tu récupères la chaine tapée dans le buffer 'chaine',
alors: if(strcmp(chaine, "cd Management") == 0)...

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
27 mars 2010 à 18:22
char acc = "access";
ça ne devrait même pas compiler.

'char' c'est 1 octet, jamais tu ne pourras y mettre l'adresse d'une chaine.

char acc[] = "access"; // OK
char *acc = "access"; // OK

Ensuite c'est strcmp() et non '==';

Plonge tpoi dans un bouquin de C.

ciao...
BruNews, MVP VC++
0
cs_Adict Messages postés 28 Date d'inscription vendredi 1 janvier 2010 Statut Membre Dernière intervention 10 août 2010
27 mars 2010 à 19:43
ok donc c'est bon j'ai cherché et trouvé pour strcmp() mais y à toujours un bug

je vous met une partie de code sur laquelle j'utilise ça et j'en est aussi profité pour utiliser fgets mais j'ai beau mettre n'importe quoi il va toujours à la premier condition

char cd[] = "cd Management";
 char cdd[] = "cd Personal Document";
/*
.......
*/
printf("\n\nterminal : ");
    fgets(chaine, sizeof chaine, stdin);
    clean(chaine);
 
 if ( strcmp( cd, "cd Management" ) == 0 )
 {   
     printf("test");
     getch();
     }

else if ( strcmp( cdd, "cd Personal Document" ) == 0 )
     {
          printf("test test");
          getch();
          }




_______________________________________________________________________
j'ai 16 ans et j'aime l'informatique, surtout les programmes
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
27 mars 2010 à 22:23
char cd[] = "cd Management";
...
if(strcmp(cd, "cd Management") == 0)
Evident que ce IF sera évalué OK à tout coup.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Adict Messages postés 28 Date d'inscription vendredi 1 janvier 2010 Statut Membre Dernière intervention 10 août 2010
27 mars 2010 à 23:07
alors comment puis-je faire pour que lorsque je tape "cd Personal Document" il ne parte pas sur if(strcmp(cd, "cd Management") == 0) à partir de fgets peut-être




j'ai 16 ans et j'aime l'informatique, surtout les programmes
0
cs_Adict Messages postés 28 Date d'inscription vendredi 1 janvier 2010 Statut Membre Dernière intervention 10 août 2010
28 mars 2010 à 00:08
je te remercie

j'ai 16 ans et j'aime l'informatique, surtout les programmes
0
Rejoignez-nous