Aller au contenu
Zebulon
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Bug sur une compilation C


nick667

Messages recommandés

Je vous livre ma source:


#include <stdio.h>

main()

{

int ctn;

float n1,n2;

char operateur;

ctn=2;

printf("La Super Calculatrice de la Mort qui Tue Tout n");

printf("Veuiller entrer le premier nombre :");

scanf("%f", &n1);

printf("Veuiller entrer le second nombre :");

scanf("%f", &n2);

printf("Veuiller entrer l'operation :");

scanf("%c", &operateur);

while (ctn!=2)

{

  printf("Vous avez choisi de calculer %f %c %f n",n1,operateur,n2);

  switch (operateur)

   {

     case + : printf("Votre résultat est %f",n1+n2); break;

     case - : printf("Votre résultat est %f",n1-n2); break;

     case * : printf("Votre résultat est %f",n1*n2); break;

     case / : printf("Votre résultat est %f",n1/n2); break;

     default : printf(" Oh c'est pas une calculatrice scientifique coco ! n");

     }

  printf ("Voulez vous continuer ? n");

  printf ("1: Ouin");

  printf ("2: Nonn");

  scanf("%d", &ctn);

  }

printf("Elle te plait pas ma SCMTT ?");

}

 

et le résultat de la compilation:


Info :Making...

Info :Compiling G:EXOSPROGRAMMATIONcalc.cpp

Error:  calc.cpp(21,15):Expression syntax

Error:  calc.cpp(21,54):Case statement missing :

Error:  calc.cpp(22,15):Expression syntax

Error:  calc.cpp(22,54):Case statement missing :

Error:  calc.cpp(23,15):Expression syntax

Error:  calc.cpp(23,54):Case statement missing :

Error:  calc.cpp(24,13):Expression syntax

Error:  calc.cpp(24,54):Case statement missing :

 

Il est ou le bug ?

Lien vers le commentaire
Partager sur d’autres sites

non, pas "pour rien"... pour apprendre que ce qui figure derrière le case doit être du même type que ce qui est derrière le switch ()

tu as juste oublié que le compilo ne considère comme "char" que ce qui est entre quotes...

 

Heuuu y a juste un probleme dans ce que tu dis, c'est que 'A' n'est pas un char mais un int pour le compilo.

 

exemple :


#define TEST1 'A';

#define TEST2 (char)'A';



printf("%d - %d", sizeof(TEST1), sizeof(TEST2));

 

Ca doit te renvoyer (si les int sont sur 32 bits) :

4 - 1

 

J'ai pas le K&R sous la main mais c'est aussi marqué dedans. Je sais ca surprend :P et dans la plupart des cas ca n'a pas d'importance. Mais quand on bosse sur de l'encodage de données au bit pret, je peux te dire que tu t'en apercois trés trés vite.

 

Automne

Lien vers le commentaire
Partager sur d’autres sites

Ah oui, exact...

D'ailleurs 'Truc' est aussi un int... mais c'était pour simplifier mon propos...

Je me voyais mal lui dire de remplacer '+' par 43 et '/' par 47 ...

J'en parlais juste parce que ca m'a choqué quand j'ai vu ca pour la 1ere fois. Betement je pensais que mon define etait de type char mais c'etait un int et dans le contexte dans lequel j'utilisais ce define ca merdait completement.

 

'Truc' ???? je connais "Truc" mais pas 'Truc' ?????

 

Automne

Lien vers le commentaire
Partager sur d’autres sites

"Truc" le compilo va te le remplacer par l'adresse à laquelle il va te coller la chaine "Truc", donc ça sera un int, mais à l'origine c'est quand même un pointeur...

'Truc' c'est un int sur 32bits. Après, tout dépend comment tu agences tes octets en mémoire mais en gros chaque caractère code un octet (logique) et si tu regardes un dump mémoire tu vois apparaitre 'Truc' (ou cruT)...

 

Et tant que j'y pense, une autre source de conneries en C :


{

char tab1[255];

char tab2[239];

char tab3[512];

char tab4[122];

char tab5[010];



tab5[9] = 'F'; 

}

Jeu : où est le bug ??

Lien vers le commentaire
Partager sur d’autres sites

'Truc' c'est un int sur 32bits. Après, tout dépend comment tu agences tes octets en mémoire mais en gros chaque caractère code un octet (logique) et si tu regardes un dump mémoire tu vois apparaitre 'Truc' (ou cruT)...

Merci, c'est bon a connaitre :-(

 

Et tant que j'y pense, une autre source de conneries en C :


{

char tab1[255];

char tab2[239];

char tab3[512];

char tab4[122];

char tab5[010];



tab5[9] = 'F'; 

}

Jeu : où est le bug ??

 

010 c'est en Octal :P

char tab5[010];

c'est pareil que :

char tab5[8];

 

Donc bien sur, tab5[9] c'est un peu en dehors de la table définie ...

 

Automne

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...