Condition type char [Résolu]

Messages postés
28
Date d'inscription
vendredi 1 janvier 2010
Statut
Membre
Dernière intervention
10 août 2010
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
3
Merci
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++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
28
Date d'inscription
vendredi 1 janvier 2010
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
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
Commenter la réponse de cs_Adict
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
char cd[] = "cd Management";
...
if(strcmp(cd, "cd Management") == 0)
Evident que ce IF sera évalué OK à tout coup.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
28
Date d'inscription
vendredi 1 janvier 2010
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
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
Commenter la réponse de cs_Adict
Messages postés
28
Date d'inscription
vendredi 1 janvier 2010
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
je te remercie

j'ai 16 ans et j'aime l'informatique, surtout les programmes
Commenter la réponse de cs_Adict