Partage
  • Partager sur Facebook
  • Partager sur Twitter

Je n'arrive pas à trouver mes erreurs !

Sujet résolu
    17 juin 2006 à 10:44:33

    Bonjour,

    Je n'arrive pas a faire un carnet d'adresse qui fonctionne, j'ai pleins de petites erreurs que je n'arrive pas à résoudre j'ai mis des commentaires en rouge pour les signaler.

    Merci (je vous le redirais à la fin mais bon ca fait toujours plaisir d'avoir un merci au début :lol: !!!

    Voicie le code au cas ou vous pourriez faire quelques commentaires pour m'aider (mes commentaires sont donc en rouge)


    #include <stdio.h>
    #include <stdlib.h>
    #include "Woffice AdresseBook 2.1.h"
    int fseek(FILE* pointeurSurFichier, long deplacement, int origine);//je n'arrive pas a me déplacer dans un fichier texte (du moins je ne sais comment bien placer cette fonction
    int main(int argc, char *argv[])

    {

    long nombre = 4;

    do//je voudrais que ma boucle englobe seulement le switch sans qu'elle l'englobe intégralement c'est à dire sans nom de la personne a ajouter etc...
    {
    long choix;
    printf("=== Woffice AddressBook 2.1 ===\n\n");
    printf ("Bienvenue dans votre carnet d'adresse que voulez vous faire ?\n\n");
    printf("1. Entrer un nouveau contact\n");
    printf("2. Rechercher un contact \n");
    printf("3. Effacer un contact \n");
    printf("4. Voire votre liste de contact\n");
    printf("\nVotre choix (1,2,3 ou 4) ? ");
    scanf("%ld", &choix);

    switch (choix)
    {
    case 1:
    {


    FILE* fichier = NULL;
    long age = 0;

    fichier = fopen("Address Book.txt", "w");

    if (fichier != NULL)
    {


    Utili ca[2];
    printf ("Nom de la personne a ajouter a votre carnet d'adresse...\n");
    scanf ("%s",ca[0].nom);
    printf ("Le prenom...");
    scanf ("%s",ca[0].prenom);
    printf ("%s %s a bien ete ajouter a votre carnet d'adresse !\n\n",ca[0].nom,ca[0].prenom);
    fseek(fichier, 1, SEEK_END);//je ne sais pas ci c'est la bonne place pour mettre ce curseur de facons a qu'il rajoute les noms a la fin
    fprintf(fichier, "%s %s", ca[0].nom,ca[0].prenom);
    fclose(fichier);
    }
    //jusqu'a la cela va bien :lol:
    long choix2 = 0;
    printf ("Voulez vous quitter ?\n");
    printf ("1. Oui\n");
    printf ("2. Non\n");
    scanf ("%ld",choix2);
    if (choix2 == 1)
    {
    nombre++;
    }

    }
    //et la c'est la catastrophe !!! Je voudrais que quand on tape 1 le programme se ferme et que quand on tape 2 le programme revient au début c'est a dire au tableau des choix. break;
    case 2:
    //je vais y complétez plus tard (déjà ca de moins Ouf !!! :lol: )
    break;
    case 3:
    {

    //plus tard
    }
    break;
    case 4:
    {
    FILE* fichier = NULL;
    int caractereActuel = 0;

    fichier = fopen("Address Book.txt", "r");

    if (fichier != NULL)
    {
    // Boucle de lecture des caractères un à un
    do
    {
    caractereActuel = fgetc(fichier); // On lit le caractère
    printf("%c", caractereActuel); // On l'affiche
    } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)

    fclose(fichier);
    }

    }
    break;
    default:
    printf("Taper un chiffre entre 1 et 4 !");
    }
    //jusqu'a la pas un probleme ! :-°
    }while (nombre == 4); // et normalement cette boucle ne doit pas répéter tout le switch mais seulement le tableaux des choix je ne sais pas si je me suis fait comprendre c'est assez dur à expliquer !

    system ("PAUSE");
    return 0;
    }


    Voilà !

    Merci d'avance à ceux qui m'apporterons une petite aide même ci ce n'est que miniscule petite erreur je suis prêt a tout entendre !

    Encore Merci...

    Et salut a tous les Zér0s !!!
    • Partager sur Facebook
    • Partager sur Twitter
      17 juin 2006 à 11:29:19

      Citation : ulried

      Bonjour,

      Je n'arrive pas a faire un carnet d'adresse qui fonctionne, j'ai pleins de petites erreurs que je n'arrive pas à résoudre j'ai mis des commentaires en rouge pour les signaler.


      Ton code commenté et corrigé partiellement. Pose des questions si tu ne comprends pas. Pour ajouter à un fichier, c'est "a" et non "w". fseek() ne fonctionne correctement que sur les fichiers binaires.

      #include <stdio.h>
      #include <stdlib.h>
      #if 0
      /* -ed- Gne ? ce quoi ca ? Va encore falloir improviser... */
      #include "Woffice AdresseBook 2.1.h"
      #else
      typedef struct
      {
         char nom[32];
         char prenom[32];
      }
      Utili;

      #endif

      /* je n'arrive pas a me déplacer dans un fichier texte
      (du moins je ne sais comment bien placer cette fonction */

      /* -ed-
      int fseek(FILE* pointeurSurFichier, long deplacement, int origine);

      il ne faut pas s'amuser a redeclarer des fonctions standards...
      */

      /* -ed-
      int main(int argc, char *argv[])

      parametres non utilises. Supprimes.
      */

      int main()
      {
      #define fname "AdresseBook.txt"

         long nombre = 4;

      /* -ed- ajoute pour clarifier et sortir... */
      int fin = 0;

         /* je voudrais que ma boucle englobe seulement le switch
         sans qu'elle l'englobe intégralement c'est à dire sans nom de la
         personne a ajouter etc...
         */


         do
         {
            long choix;
            printf("=== Woffice AddressBook 2.1 ===\n\n");
            printf ("Bienvenue dans votre carnet d'adresse que voulez vous faire ?\n\n");
            printf("1. Entrer un nouveau contact\n");
            printf("2. Rechercher un contact \n");
            printf("3. Effacer un contact \n");
            printf("4. Voir votre liste de contact\n");

      /* -ed- defaut de conception. Pas de sortie ! */
            printf("9. Quitter\n");

            printf("\nVotre choix (1,2,3 ou 4) ? ");
            scanf("%ld", &choix);

            switch (choix)
            {
            case 1:
               {
                  /* -ed- non utilisee
                  long age = 0;
                  */

      /* -ed-
                  FILE* fichier = NULL;
                  fichier = fopen(fname, "w");

      ben non... le mode "w" ecrase a chaque fois...
      */

                  FILE *fichier = fopen(fname, "a");

                  if (fichier != NULL)
                  {
                     Utili ca[2];
                     /* -ed- pourquoi 2 ? */

                     printf ("Nom de la personne a ajouter a votre carnet d'adresse...\n");
                     scanf ("%s", ca[0].nom);
                     printf ("Le prenom...\n");
                     scanf ("%s", ca[0].prenom);
                     printf ("%s %s a bien ete ajoute a votre carnet d'adresse !\n\n"
                     , ca[0].nom
                     , ca[0].prenom);

                     /* -ed-
                     fseek(fichier, 1, SEEK_END);

                     inutile. Ouvrir en mode "a"
                     */

                     /* je ne sais pas ci c'est la bonne place pour mettre
                     ce curseur de facons a qu'il rajoute les noms a la fin */


                     /* -ed-
                     fprintf(fichier, "%s %s", ca[0].nom, ca[0].prenom);

                     format 'naif'. Preferer CSV. Terminer l'enregistrement par '\n'...
                     */

                     fprintf(fichier, "%s;%s\n", ca[0].nom, ca[0].prenom);

                     fclose(fichier);
                  }
                  //jusqu'a la cela va bien :lol:
                  /* -ed-
                  long choix2 = 0;
                  printf ("Voulez vous quitter ?\n");
                  printf ("1. Oui\n");
                  printf ("2. Non\n");
                  rendu inutile */


                  /* -ed-
                  scanf ("%ld", choix2);

                  erreur classique. scanf() avec %ld attend l'adresse d'un long.

                  scanf ("%ld", &choix2);
                  if (choix2 == 1)
                  {
                     nombre++;
                  }
                  */


               }
               /* et la c'est la catastrophe !!!
               Je voudrais que quand on tape 1 le programme se ferme et
               que quand on tape 2 le programme revient
               au début c'est a dire au tableau des choix.
               */

               break;

            case 2:
               /* je vais y complétez plus tard (déjà ca de moins Ouf !!! :lol: ) */
               break;

            case 3:
               {
                  /* plus tard */
               }
               break;

            case 4:
               {
                  FILE* fichier = NULL;
                  int caractereActuel = 0;

                  fichier = fopen(fname, "r");

                  if (fichier != NULL)
                  {
                     // Boucle de lecture des caractères un à un
                     do
                     {
                        caractereActuel = fgetc(fichier); // On lit le caractère
                        printf("%c", caractereActuel); // On l'affiche
                     }
                     while (caractereActuel != EOF);
                     /* On continue tant que fgetc n'a pas retourné
                     EOF (fin de fichier) */

                     
                     fclose(fichier);

                     /* -ed- un minimum de presentation... */
                     putchar('\n');
                  }
               }
               break;

               case 9:
               /* -ed- ceci corrige tout tes problemes de repetition et de sortie ... */
               fin = 1;
               break;

            default:
               printf("Taper un chiffre entre 1 et 4 !");
            }
            //jusqu'a la pas un probleme ! :-°
         }
      /* -ed-
         while (nombre == 4);
      incomprehensible... */

         while (!fin);

         /* et normalement cette boucle ne doit pas répéter tout le switch mais
         seulement le tableaux des choix je ne sais pas si je me suis fait
         comprendre c'est assez dur à expliquer !
         */


      /* -ed-
         system ("PAUSE");

         inutile. Utilise Code::Blocks, par exemple...
         */

         return 0;
      }
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        17 juin 2006 à 12:34:46

        Merci d'avoir pris le temps de commentés j'y prendrai compte. Et perci encore !
        • Partager sur Facebook
        • Partager sur Twitter

        Je n'arrive pas à trouver mes erreurs !

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown