Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1801 connectés 

  FORUM HardWare.fr
  Programmation
  C

  pb de macro en c

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb de macro en c

n°1239898
Zigzig9
Posté le 06-11-2005 à 19:28:53  profilanswer
 

Bonsoir,
j'ai un programme à faire à l'aide de macro. Ce programme doit lire un texte et donner la lettre suivante (a suit z)si c'est une lettre ou le chiffre précédent (9 précède 0)si c'est un chiffre. Il faut aussi différencier lettre MAJ et MIN! Donc j'ai fait le programme suivant qui marche sauf pour le "Z" qui me donne "[" au lieu de me donner "A".sinon le reste marche nikel.J'ai fait différent test et je pense que ça vient de la macro LETTRE_MAJ, mais je vois pas pourquoi!Voila si qqun peut m'aider
 
#include <stdio.h>
#define CHIFFRE(X)  ((X)<='9' && (X)>='0')
#define LETTRE_MAJ(X) (((X)<='Z') && ((X)>='A'))
#define LETTRE_MIN(X) ((X)<='z' && (X)>='a')
#define LETTRE(X) ((LETTRE_MAJ(X) or LETTRE_MIN(X))? true:false)
#define SUIVANT(X,INF,SUP) (((((X)<='y')||((X)<='Y')) && (((X)>='A')||((X)>='a')))?(X=X+1):(X=INF))
#define PRECEDENT(X,INF,SUP)(((X)<='9' && (X)>='1')?(X=X-1):(X=SUP))
#define LIRE_LIGNE(X)  scanf ("%s[^\n]",X)
/*#define FORMAT "80%[^\n]%*c" */
 
int main(void)
{
  char buffer [10] [80];
  int i=1;/* lignes*/
  int j=0;/* colonnes*/
 
bool fin=false;
 
  printf("Saisir la ligne:" );
  LIRE_LIGNE(buffer[i]);
  j=0;
  while (buffer[i][j]!='\n' && j<=80)
    {
  if CHIFFRE(buffer[i][j])  
        buffer[i][j]=PRECEDENT(buffer[i][j],'0','9');  
             
    else
     {
          if (LETTRE_MIN(buffer[i][j]))
       buffer[i][j]= SUIVANT(buffer[i][j],'a','z');
       else
       {
            if (LETTRE_MAJ(buffer[i][j]))
         buffer[i][j]= SUIVANT(buffer[i][j],'A','Z');  
          }
     }
     j++;
     }
    printf("%d: %s",i,buffer[i]);  
}

mood
Publicité
Posté le 06-11-2005 à 19:28:53  profilanswer
 

n°1239901
Taz
bisounours-codeur
Posté le 06-11-2005 à 19:32:27  profilanswer
 

vas voir dans <ctype.h>
'or' n'est pas du C

n°1239919
Elmoricq
Modérateur
Posté le 06-11-2005 à 20:03:31  profilanswer
 

bool non plus.
 
main() doit retourner un int, pourtant il n'y a pas de return.
 
Et j'ai pas bien compris le délire sur les macros, surtout qu'elles sont magnifiquement laides. Le nombre de parenthèses me fait penser à du Lisp.
Sérieux, pourquoi des macros ?
 
PS : faut mettre le code entre les balises du forum [cpp ][/cpp] (sans espace) sinon c'est peu lisible.
 
 
EDIT : et pour ce que tu souhaites faire, regarde du côté du modulo


Message édité par Elmoricq le 06-11-2005 à 20:06:51
n°1239932
Zigzig9
Posté le 06-11-2005 à 20:40:54  profilanswer
 

j'ai pas le choix! Les macros c'est le but de mon exercice, donc faut bien que je les fasse!!!!!
ok pour les balises, dsl je savais pas!

n°1239959
0x90
Posté le 06-11-2005 à 21:27:12  profilanswer
 

en ebcdic ca va donner quoi tout ca ? [:pingouino]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1239987
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-11-2005 à 21:46:59  profilanswer
 

0x90 a écrit :

en ebcdic ca va donner quoi tout ca ? [:pingouino]


Méchant garçon...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1240063
Elmoricq
Modérateur
Posté le 06-11-2005 à 22:45:13  profilanswer
 

Zigzig9 a écrit :

j'ai pas le choix! Les macros c'est le but de mon exercice, donc faut bien que je les fasse!!!!!


 
Oh la la. [:kzimir]  
 
C'est un professeur qui t'a demandé de faire ça ?
 
Non parce que, les macros sont des outils formidables pour alléger certaines parties répétitives et autrement plus difficiles à lire dans le code. Là, ton exercice te demande de faire tout le contraire d'une macro.
 
Parce que ça me fait mal de voir une bouillie de parenthèses pareille, je te donne un exemple plus simple de macro pour incrémenter les minuscules, en utilisant les modulos :

Code :
  1. #define INC_MIN(X) (X - 'a' + 1) % 26 + 'a'


Quand même plus lisible que les opérateurs ternaires, pour le coup. A appliquer sur les majuscules c'est facile, t'as pas grand chose à changer.  
Pour décrémenter les chiffres, y a une astuce à appliquer pour rester dans les modulos. Je te laisse la chercher ('vais quand même pas te faire tes exos :o )


Message édité par Elmoricq le 06-11-2005 à 22:46:53
n°1240822
matafan
Posté le 07-11-2005 à 21:19:01  profilanswer
 

Ben justement, Elmoricq, dans la macro que tu donnes il manque des parentheses. Le regle de base quand on ecrit des macro, c'est de toujours mettre des parentheses autour des arguements, et de toujours mettre des parentheses autour de la marco. Parce qu'on ne sais jamais ce qui va etre passe en arguement, et on ne sais jamais dans quel contexte la macro va etre utilisee.
 
Bref ta macro devrait etre :

Code :
  1. #define INC_MIN(X) (((X) - 'a' + 1) % 26 + 'a')

n°1240868
Elmoricq
Modérateur
Posté le 07-11-2005 à 22:25:17  profilanswer
 

Hmm, ta façon de faire autorise l'écriture de :  
 

if INC_MIN(buffer[i][j])


 
Donc c'est assez laid.
 
Mais d'un autre côté, si on écrit :

INC_MIN(buffer[i][j]) * 2


avec ma méthode, c'est vrai qu'on est un peu mal. :/
 
A tout prendre, c'est vrai qu'avec des parenthèses c'est mieux, une syntaxe laide est "moins pire" qu'un calcul faux (et de loin).
Mais décidemment, je n'aime pas les macros dès qu'elles dépassent les facilités d'écriture, je trouve que INC_MIN illustre bien la macro qui devrait être une fonction, en fait.
[:spamafote]
 
EDIT : je parle dans une pratique courante, je reconnais certains avantages des macros, hein...  


Message édité par Elmoricq le 07-11-2005 à 22:28:55

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  pb de macro en c

 

Sujets relatifs
aide sur une macroMacro excel de sauvegarde [resolu]
Macro pour excel[Résolu] Macro Excel définir le nom d'une palge de cellules
RESOLU - [EXCEL-VBA] Comment exécuter une macro si excel perd le focusAide pour une macro excel
Fichier avec macro sous excel[VBA]executer une macro à une heure donnée
MacroLancer une macro PPT à partir d'Excel
Plus de sujets relatifs à : pb de macro en c


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR