Probleme de code en C

Résolu
tamaiste Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
tamaiste Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je viens d'ecrire ce bout de code :

void menu()
{
char choice;
printf("pour saisir un nouveau contact tapez s :");
printf("pour afficher le repertoire tapez a :");
printf("votre choix :");
scanf("%s",choice);
printf("%s",choice);
switch(choice)
{
case's' : informations();break;
case'a' : affichage();break;
default: menu();break;
}
}

informations et affichage sont deux fonctions.
mon compilateur me met "erreur mismatch"

je cherche je cherche ou est mon erreur mais je ne trouve pas quelqu'un aurait - il la solution desole je debute en C ??

merci d'avance
A voir également:

7 réponses

CORBEAU
 
essayez
...................
scanf("%c", &choice);
printf("%c",choice);
.....................
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

affiche le code complet.
merci
-1
tamaiste Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
#include <stdio.h>
struct contact
{
char nom[30];
char prenom[30];
char tel[10];
int numero;
}perso;

char saisie[160];
char confirm[2];
char erase[3];
FILE *f;


void informations()
{
clrscr();
printf("Saississez votre nom :");
scanf("%s" , saisie);
strcpy(perso.nom , saisie);
printf("Saississez votre prenom :");
scanf("%s" , saisie);
strcpy(perso.prenom , saisie);
printf("Saississez votre numero de telephone :");
scanf("%s" , saisie);
strcpy(perso.tel , saisie);
printf("\nVous avez saisi les informations suivantes :");
printf("\n");
printf("\n%s \n%s \n%s",perso.nom,perso.prenom,perso.tel);
printf("\n");
printf("\n");
f=fopen("contacts.txt" , "wb");
printf("\nTaper ok puis Entree pour confirmer votre saisie :");
scanf("%s",confirm);
if(strcmp(confirm,"ok") ==0)
{
fwrite(&perso ,sizeof(perso) , 1 , f);
printf("\n");
printf("Felicitations vous avez bien ete enregistrer !!!");
}
else
{
printf("enregistrement annule...");
}
fclose(f);
menu();
}



void affichage()
{
f=fopen("contacts.txt","rb");
while(!feof(f))
{
fread(&perso , sizeof(perso) , 1 , f);
if(!feof(f))
printf("\n");
printf("\n");
printf("%s %s %s\n\n",perso.nom,perso.prenom,perso.tel);
}
fclose(f);
menu();
}


void menu()
{
char choice;
printf("pour saisir un nouveau contact tapez s :");
printf("pour afficher le repertoire tapez a :");
printf("votre choix :");
scanf("%s",choice);
printf("%s",choice);
switch(choice)
{
case 's' : informations();break;
case 'a' : affichage();break;
default: menu();break;
}
}


int main()
{
menu();
getch();
}

voila le code complet
-1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

voici mon opinion,

1. tu as oublié #include <string.h >
2. si on structure le programme, on crée des fonctions pour une tache spécifique. La fonction affichage ne doit faire que l'affichage.
En revanche, l'affichage du menu tu peux le gérer dans main avec une boucle sur le choix
3. il faut ecrire les prototypes de fonctions après les #include
dans ton cas affichage appelle menu, mais menu est défini après l'affichage ce qui engendra un message d'erreur de la part du compilateur

Je suis au boulot et je n'ai pas le temps d'arranger ça.
Si jamais tu ne trouves pas d'aide, je regarderai plus tard.
-1

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

Posez votre question
mamiemando Messages postés 33774 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Voici déjà un premier jeu de correction qui te permettront au moins de compiler (je n'ai pas testé le programme)
#include <string.h>
#include <stdio.h>
struct contact
{
    char nom[30];
    char prenom[30];
    char tel[10];
    int numero;
}perso;

char saisie[160];
char confirm[2];
char erase[3];
FILE *f;

void menu();

void informations()
{
//  clrscr(); // cette fonction n'est pas standard et ne doit donc pas être utilisée.
    printf("Saississez votre nom :");
    scanf("%s" , saisie);
    strcpy(perso.nom , saisie);
    printf("Saississez votre prenom :");
    scanf("%s" , saisie);
    strcpy(perso.prenom , saisie);
    printf("Saississez votre numero de telephone :");
    scanf("%s" , saisie);
    strcpy(perso.tel , saisie);
    printf("\nVous avez saisi les informations suivantes :");
    printf("\n");
    printf("\n%s \n%s \n%s",perso.nom,perso.prenom,perso.tel);
    printf("\n");
    printf("\n");
    f=fopen("contacts.txt" , "wb");
    printf("\nTaper ok puis Entree pour confirmer votre saisie :");
    scanf("%s",confirm);
    if(strcmp(confirm,"ok") ==0)
    {
        fwrite(&perso ,sizeof(perso) , 1 , f);
        printf("\n");
        printf("Felicitations vous avez bien ete enregistrer !!!");
    }
    else
    {
        printf("enregistrement annule...");
    }
    fclose(f);
    menu();
}
void affichage()
{
    f=fopen("contacts.txt","rb");
    while(!feof(f))
    {
        fread(&perso , sizeof(perso) , 1 , f);
        if(!feof(f))
            printf("\n");
        printf("\n");
        printf("%s %s %s\n\n",perso.nom,perso.prenom,perso.tel);
    }
    fclose(f);
    menu();
}


void menu()
{
    char choice;
    printf("pour saisir un nouveau contact tapez s :");
    printf("pour afficher le repertoire tapez a :");
    printf("votre choix :");
    scanf("%c",&choice);
    printf("%c",choice);
    switch(choice)
    {
        case 's' : informations();break;
        case 'a' : affichage();break;
        default: menu();break;
    }
}


int main()
{
    menu();
    getchar();
    return 0;
}

Je te laisse regarder les différences.
Evite a tout prix d'utiliser des variables globales. Je sais que ça alourdit les prototypes de fonction mais c'est très important pour que ton programme soit lisible de ne pas les utiliser. De manière général les variables globales ne devraient jamais être utilisées.

Bonne chance
-1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Voic avec quelque modifications.
Un menu de genre
1. Saisie
2. Affichage
3. Quitter
et bien plus parlant que
pour saisir un nouveau contact tapez s :
pour afficher le repertoire tapez a :


Je n'ai pas modifié le prototype des fonctions, donc j'ai laissé les variables globales en place, à toi de modifier les prototypes pour eviter les variables globales
#include <stdio.h>
#include <string.h>

void enregistrement ();
void menu ();
void affichage ();;

struct contact{
  char nom[30];
  char prenom[30];
  char tel[10];
  int numero;
} perso;

char saisie[160];
char confirm[2];
char erase[3];
FILE *f;


int main ()
{
  int choix = 0;
  while (choix != 3){
      menu ();
      printf ("\nvotre choix :");
      scanf ("%d", &choix);
      switch (choix){
        case 1:
                enregistrement ();
                break;
        case 2:
                affichage ();
                break;
        case 3:
                printf ("Au revoir !\n");
                break;
      }
      getchar ();
    }
  return 0;
}

void enregistrement (){
  printf ("Saississez votre nom :");
  scanf ("%s", saisie);
  strcpy (perso.nom, saisie);
  printf ("Saississez votre prenom :");
  scanf ("%s", saisie);
  strcpy (perso.prenom, saisie);
  printf ("Saississez votre numero de telephone :");
  scanf ("%s", saisie);
  strcpy (perso.tel, saisie);
  printf ("\nVous avez saisi les informations suivantes : \n");
  printf ("\n%s \n%s \n%s\n\n", perso.nom, perso.prenom, perso.tel);
  
  f = fopen ("contacts.txt", "ab");
  printf ("\nTaper ok puis Entree pour confirmer votre saisie :");
  scanf ("%s", confirm);
  if (strcmp (confirm, "ok") == 0){
      fwrite (&perso, sizeof (perso), 1, f);
      printf ("\nFelicitations vous avez bien ete enregistrer !!!\n\n");
  }else{
      printf ("enregistrement annule...\n");
  }
  fclose (f);
}

void affichage (){
  f = fopen ("contacts.txt", "rb");
  while (!feof (f)){
      fread (&perso, sizeof (perso), 1, f);
      if (!feof (f))
        printf ("%s %s %s\n", perso.nom, perso.prenom, perso.tel);
  }
  fclose (f);
}


void menu (){
  printf ("1. Saisie\n");
  printf ("2. Affichage\n");
  printf ("3. Quitter\n");
}
-1
tamaiste Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup tout le monde
-1