Mes questions en C++

Mes questions en C++ - C++ - Programmation

Marsh Posté le 27-02-2003 à 17:42:48    

Salut à tous,
 
alors plutôt que de créer à chaque fois un topic pour une question, je poserai toutes mes futures interrogations dans ce topic...
 
C'est parti:
 
comment je peux réduire la condition suivante?
 

Code :
  1. if(Key == ':' || Key == '/' || Key == '\\' || Key == '*' || Key == '?' || Key == '"' || Key == '<' || Key == '>' || Key == '|')


 
Parce qu'en fait ça permet de vérifier quand l'utilisateur tape son futur nom de fichier qu'il n'y mettra pas de caractère qui annulera la création du fichier...
 
Et ensuite je voudrais savoir comment récupérer une chaine de caractère moins le dernier caractère tapé, comme cela quand l'utilisateur tape une touche "interdite", la chaine de texte qu'il est en train de taper se réactualise sans ce fameux caractère...
 
Merci d'avance!!

Reply

Marsh Posté le 27-02-2003 à 17:42:48   

Reply

Marsh Posté le 27-02-2003 à 18:05:56    

Les codes ASCII de ces touches ne sont pas contigüs, ça risque de pas être coton [:meganne]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-02-2003 à 18:10:39    

pour ta chaine sans le dernier caractères:

Code :
  1. char buf[255];
  2. buf[strlen(buf)-1] = '\0'; //normalement c'est bon je suis plus sur du -1 s'il le faut ou pas


Message édité par antsite le 27-02-2003 à 18:11:27
Reply

Marsh Posté le 27-02-2003 à 18:37:28    

Voila comment je ferais en C, le code est pas optimise mais c plus lisible je pense :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. void lireNomFichier () ;
  5. int main(int argc, char *argv[])
  6. {
  7. char tampon [32] ;
  8. lireNomFichier (tampon, sizeof (tampon)) ;
  9. printf ("Nom : %s\n", tampon) ;
  10. system("PAUSE" );
  11. return 0;
  12. }
  13. void lireNomFichier (char * tampon, unsigned int taille)
  14. {
  15. char caractereCourant ;
  16. int i ;
  17. /* vider la chaine */
  18. for (i = 0 ; i < taille ; i++)
  19.  tampon [i] = '\0' ;
  20. /* se positionner sur le premier caracetere*/
  21. i = 0 ;
  22. printf ("Entrer votre nom de fichier : " ) ;
  23. while (((caractereCourant = getchar ()) != '\n') &&
  24.   i < taille - 1)
  25. {
  26.  switch (caractereCourant)
  27.  {
  28.   /* caracteres invalides */
  29.   case ':' :
  30.   case '*' :
  31.   case '\\' :
  32.   case '/' :
  33.   case '?' :
  34.   case '"' :
  35.   case '<' :
  36.   case '>' :
  37.   case '|' :
  38.    /* ne rien faire ou afficher un msg d'erreur*/
  39.    break ;
  40.   /* caracteres valides */
  41.   default :
  42.    /* copier le caractere valide*/
  43.    tampon [i] = caractereCourant ;
  44.    /* passer au caractere suivant */
  45.    i++ ;
  46.  }
  47. }
  48. }


Message édité par Poireau le 27-02-2003 à 18:39:21
Reply

Marsh Posté le 27-02-2003 à 18:37:44    

Harkonnen a écrit :

Les codes ASCII de ces touches ne sont pas contigüs, ça risque de pas être coton [:meganne]


 
En PHP on peut faire un truc du style:
 

Code :
  1. if (x == ("oui" | "non" | "peut être" )
  2. {
  3. }


 
Comme ça on déclenche si x vaut soit oui, soit non,....
 
On peut pas faire quelque chose dans le même genre en C++??

Reply

Marsh Posté le 27-02-2003 à 18:44:03    

haazheel a écrit :


comment je peux réduire la condition suivante?
 

Code :
  1. if(Key == ':' || Key == '/' || Key == '\\' || Key == '*' || Key == '?' || Key == '"' || Key == '<' || Key == '>' || Key == '|')



Code :
  1. if (strchr(":/\\*?\"<>|",Key)) { ... }

Reply

Marsh Posté le 27-02-2003 à 18:45:04    

merci de ton aide Poireau, mais je code avec Borland C++ Builder 6, et j'ai ça pour le moment:
 

Code :
  1. void __fastcall TAssistantForm::NomMatchKeyPress(TObject *Sender,char &Key)
  2. {
  3.   if(Key == ':' || Key == '/' || Key == '\\' || Key == '*' || Key == '?' || Key == '"' || Key == '<' || Key == '>' || Key == '|')
  4.   {
  5.         ShowMessage("Les caractères suivants sont interdits\r\n\\ / : * ? \" < > |" );
  6.   }
  7. }


 
Quant à ta solution ANTsite, le problème est que mon nom de fichier, que je tape dans un EditBox, est un AnsiString...
 
comment je peux convertir un AnsiString en char?
 
Le nom de fichier qui est tapé s'appelle NomMatch->Text

Reply

Marsh Posté le 27-02-2003 à 18:47:16    

Captain ad-hoc a écrit :


Code :
  1. if (strchr(":/\\*?\"<>|",Key)) { ... }




 
Parfait!! Ca fonctionne nickel!!
 
Merci beaucoup :jap:

Reply

Marsh Posté le 02-03-2003 à 00:59:13    

Bon, voilà, ça y est, j'ai réglé tous ces problèmes...
 
Maintenant, voici le nouveau:
 
j'arrive désormais à lire une vidéo AVI ou MPEG grâce à un composant MediaPlayer inclus dans C++ Builder...
 
La question que je me pose est de savoir si ce composant est aussi rapide qu'un player codé de toutes pièces en MCI?
 
Si non, auriez vous des liens qui expliquent une telle programmation? Parce que j'ai eu des bouts de code sur groups.google, mais j'arrive pas à compiler...
 
Merci d'avance...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed