Probleme de code en C

Résolu/Fermé
tamaiste Messages postés 4 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 12 octobre 2007 - 10 oct. 2007 à 21:57
tamaiste Messages postés 4 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 12 octobre 2007 - 12 oct. 2007 à 21:05
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

essayez
...................
scanf("%c", &choice);
printf("%c",choice);
.....................
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
10 oct. 2007 à 22:05
Salut,

affiche le code complet.
merci
-1
tamaiste Messages postés 4 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 12 octobre 2007
11 oct. 2007 à 06:36
#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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 oct. 2007 à 09:51
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
11 oct. 2007 à 10:27
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 oct. 2007 à 11:14
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 mercredi 10 octobre 2007 Statut Membre Dernière intervention 12 octobre 2007
12 oct. 2007 à 21:05
merci beaucoup tout le monde
-1