Erreur en programmation C

Résolu
Bonjour, je me suis mis depuis quelques temps au langage C, et j'ai souvent une erreur dans mes petits programmes (qui ne font pas grand chose de bien, pour l'instant ^^). Voici l'un d'eux :

Programme :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

printf("\t\t=== MENU ===\n\n");
char choixMenu = 0;

printf("\n1. Royal Cheese\t12.-\n\n2. Mc Deluxe\t13.-\n\n3. Mc Bacon\t10.-\n\n4. Big Mac\t10.-\n\n5. Salade oeuf & poulet\t8.-\n\n6. Je n'ai pas faim !\n");

printf("\n\nVotre choix ? ");
scanf("%ld", &choixMenu);

printf("\n");
if (choixMenu == 1)
printf("Vous avez choisi le Royal Cheese (menu 1)\n\t12.-\n\n\t\tMerci et bon appétit !");

else if (choixMenu == 2)
printf("Vous avez choisi le Mc Deluxe (menu 2)\n\t13.-\n\n\t\tMerci et bon appétit !");

else if (choixMenu == 3)
printf("Vous avez choisi le Mc Bacon (menu 3)\n\t10.-\n\n\t\tMerci et bon appétit !");

else if (choixMenu == 4)
printf("Vous avez choisi le Big Mac (menu 4)\n\t10.-\n\n\t\tMerci et bon appétit !");

else if (choixMenu == 5)
printf("Vous avez choisi la Salade oeuf & poulet (menu 1)\n\t8.-\n\n\t\tMerci et bon appétit !");

else if (choixMenu == 6)
printf("Vous n'avez pas faim.");

else
printf("Vous n'avez pas choisi de menu. Par consequent, vous ne mangerez pas ! Mais c'est quand meme 10.- !");

printf("\n\n\n");
system("PAUSE");
return 0;
}

Problème lors de la compilation :

------ Début de la génération : Projet : Menu, Configuration : Debug Win32 ------
Compilation en cours...
main.c
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(9) : error C2143: erreur de syntaxe : absence de ';' avant 'type'
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(15) : error C2065: 'choixMenu' : identificateur non déclaré
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(19) : error C2065: 'choixMenu' : identificateur non déclaré
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(22) : error C2065: 'choixMenu' : identificateur non déclaré
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(25) : error C2065: 'choixMenu' : identificateur non déclaré
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(28) : error C2065: 'choixMenu' : identificateur non déclaré
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(31) : error C2065: 'choixMenu' : identificateur non déclaré
c:\documents and settings\delessert\mes documents\visual studio 2008\projects\menu\menu\main.c(34) : error C2065: 'choixMenu' : identificateur non déclaré
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Delessert\Mes documents\Visual Studio 2008\Projects\Menu\Menu\Debug\BuildLog.htm"
Menu - 8 erreur(s), 0 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

La faute doit surgire quand je déclare ma variable (char), mais il me semble que j'ai fait juste...

Pour précision, j'utilise Microsoft Visual C++ 2008 Express Edition.
Configuration: Windows XP
Microsoft Visual C++ 2008 Express Edition

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    hello
    choixMenu est traité comme un nombre, il faut donc le déclarer:
    int choixMenu = 0;
    et le lire :
    scanf("%d", &choixMenu);
    1. Ce n'est pas ce que j'ai fait ?

      J'ai mis :

      char choixMenu = 0;

      scanf("%ld", &choixMenu);
  2. Contributeur
    non, char défini un caractère, donc les tests devraient être
    if (choixMenu == '1')
    le caractère, la touche de clavier 1 pas le chiffre 1

    %ld lit un entier long, il faut enlever le l pour lire un int
    scanf("%d", &choixMenu);

    pour lire un caractère defini comme char:
    scanf("%c", &choixMenu);
    1. En effet, ça fonctionne mieux maintenant, mais il y a quand-même un problème avec le titre ( le printf("\t\t=== MENU ===\n\n"); ).
  3. Contributeur
    int main(int argc, char *argv[])
    {
       int choixMenu = 0; 
       printf("\t\t=== MENU ===\n\n");
    
    1. J'ai éssayé, mais ça ne fonctionne pas (il se produit une erreur avec la saisie (scanf) et me met le dernier choix, "Je n'ai pas faim")
  4. Contributeur
    quelle erreur ?
    1. Je ne sais pas, il ne me dit pas. Le programme s'execute normalement, il me demande le numéro du menu, je met un numéro de menu et il me met le message du dernier, le else (Vous n'avez pas choisi de menu.)
  5. Contributeur
    Plutôt que d'utiliser des if else difficiles à suivre, utiliser l'instruction switch:

        switch (choixMenu)
        {
        case 1: 
    	printf("Vous avez choisi le Royal Cheese (menu 1)\n\t12.-\n\n\t\tMerci et bon appétit !");
            break;
        case 2:
    	printf("Vous avez choisi le Mc Deluxe (menu 2)\n\t13.-\n\n\t\tMerci et bon appétit !");
            break;
        case 3:
    	printf("Vous avez choisi le Mc Bacon (menu 3)\n\t10.-\n\n\t\tMerci et bon appétit !");
            break;
        case 4:
    	printf("Vous avez choisi le Big Mac (menu 4)\n\t10.-\n\n\t\tMerci et bon appétit !");
            break;
        case 5:
    	printf("Vous avez choisi la Salade oeuf & poulet (menu 1)\n\t8.-\n\n\t\tMerci et bon appétit !");
            break;
        case 6:
    	printf("Vous n'avez pas faim.");
            break;
        default:
    	printf("Vous n'avez pas choisi de menu. Par consequent, vous ne mangerez pas ! Mais c'est quand meme 10.- !");
        }
    
    1. Oui, merci !