Erreur en programmation C

Résolu/Fermé
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 - 14 sept. 2008 à 09:30
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 - 14 sept. 2008 à 17:57
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.

5 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2008 à 10:54
hello
choixMenu est traité comme un nombre, il faut donc le déclarer:
int choixMenu = 0;
et le lire :
scanf("%d", &choixMenu);
-1
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 43
14 sept. 2008 à 11:01
Ce n'est pas ce que j'ai fait ?

J'ai mis :

char choixMenu = 0;

scanf("%ld", &choixMenu);
-1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2008 à 11:07
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
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 43
14 sept. 2008 à 11:38
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"); ).
-1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2008 à 12:03
int main(int argc, char *argv[])
{
   int choixMenu = 0; 
   printf("\t\t=== MENU ===\n\n");
-1
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 43
14 sept. 2008 à 12:13
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")
-1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2008 à 12:20
quelle erreur ?
-1
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 43
14 sept. 2008 à 15:43
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.)
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 sept. 2008 à 17:19
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
Jeankowkow Messages postés 138 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 2 avril 2016 43
14 sept. 2008 à 17:57
Oui, merci !
-1