Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1589 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Svp aider un débutant en C ^^

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Svp aider un débutant en C ^^

n°1043630
loulou111
Posté le 12-04-2005 à 00:33:41  profilanswer
 

Bonsoir à toutes et à tous, voilà je suis un débutant en C et je voudrais en fait pourvoir ajouter des données dans un fichier caractérisées par un Nom de film et Un genre du film en question.
J'esseye d'abord avec un VHS et je pense que si celui ci marche, je pourrais adapté pour les autres.^^
 
Est-ce que vous pouvez me dire si ce que j'ai fais pour le moment est juste ou non svp et de corriger si besoin est ?
Merci d'avance. ( J'ai un pb avec mon compilateur C ^^)
 
#include <stdio.h>
#include <stdlib.h>
 
           
typedef struct{
 
    char *nom;
    char *genre;
                             
}FICHE;
 
typedef enum
{
 CatProduitVHS =0,
 CatProduitDVD,
 CatProduitLivre,
 CatProduitCD,
}CatProduit;
 
FILE* OuvrirFichier(CatProduit CategorieProduit)
{
 FILE * tmpFile;  
 
 switch(CategorieProduit)
  {
 
  case CatProduitVHS :
   tmpFile = fopen("vhs.txt","wa" );    
   break;
 
  case CatProduitDVD :
   tmpFile = fopen("dvd.txt","wa" );
   break;
 
  case CatProduitLivre :
   tmpFile = fopen("livres.txt","wa" );
   break;
     
  case CatProduitCD :
   tmpFile = fopen("CDs.txt","wa" );
   break;
 
  default :
   break;
  }
 
 return tmpFile;
}
 
int InsererProduit(FILE * fichierProduit,CatProduit CategorieProduit)
{
 switch(CategorieProduit)
  {
 
  case CatProduitVHS :
   // !!!!! se placer a la fin du fichier !!!!    
 
   // on écrit
   fwrite(&fichierProduit,sizeof(FICHE),1,fichierProduit);
   break;
 
  case CatProduitDVD :
   break;
 
  case CatProduitLivre :
   break;
 
  default :
   break;
  }
 return(1);
 
}
 
void main ()
{
 FICHE *VHS;
 FILE *FichierVHS;
 
 CatProduit Produit = CatProduitVHS;
 
 VHS=(FICHE*)malloc(sizeof(FICHE));
 
 // On ouvre le fichier des VHS
 
 FichierVHS = OuvrirFichier(Produit);
 
 printf("Nom du VHS: " );
 scanf("%c",VHS->nom);
 
 printf("\nGenre : " );
 scanf("%c",VHS->genre);
 
 InsererProduit(FichierVHS,Produit);
 
}

mood
Publicité
Posté le 12-04-2005 à 00:33:41  profilanswer
 

n°1043650
matafan
Posté le 12-04-2005 à 04:43:44  profilanswer
 

Bon j'ai la flemme de regarder en détail, mais il y a de grosses erreurs qui sautent aux yeux. Tu as de grosses lacunes, et je te recommande vivement de potasser un bouquin de C (en particulier la notion de pointeurs).
 
1) VHS=(FICHE*)malloc(sizeof(FICHE)); Je le sens mal... D'après quoi que contient le type FICHE ? Si tu penses "deux chaines de caractères", tu as tort.
 
2) scanf("%c",VHS->nom); %c ne lit qu'un caractère, pas une chaine. Et non, %s n'est pas la bonne solution. Utilises fgets, ou getline si la portabilité n'est pas un soucis.
 
3) fwrite(&fichierProduit,sizeof(FICHE),1,fichierProduit); Le premier argument de fwrite doit être l'adresse du buffer qui contient les données à écrire. Ce que tu as écrit n'a aucun sens.
 
4) Globalment il manque un argument à ta fonction InsererProduit... Il faudrait peut-être passer, d'une manière ou d'une autre, les données à écrire ?
 
5) Je passe sur les #include manquant, les test manquants pour les cas d'erreurs et les commentaires à la C++

n°1043752
Sve@r
Posté le 12-04-2005 à 09:54:47  profilanswer
 

1) si tu veux poster du code, insère-le entre balises \[fixed\] ou \[cpp\] (sans les backslashes)
 
2)

typedef struct{  
 
    char *nom;  
    char *genre;  
                             
}FICHE;


 
Pas bon du tout. Ta structure ne contient que deux pointeurs alors qu'elle devrait contenir deux chaînes. On va pas faire un cours sur les pointeurs, mais pour résumer, une chaîne de caractères est un tableau de "n" octets réservés en mémoire alors qu'un pointeur pointe vers n'importe quelle zone mémoire, même vers une zone où rien ne t'a été réservé.
 
Accessoirement, il est d'usage de réserver les majuscules aux macrodéfinitions et de nommer ses types "t_...." => t_fiche par exemple.
 
3) void main() => main est de type "int"
 
4) l'arguement "wa" de "fopen" m'est inconnu (mais je ne connais pas les subtilités de ton compilo).
Les arguments que je connais
"r" => lecture
"w" => écriture avec réinitialisation du fichier (RAZ)
"a" => ajout (écriture en fin de fichier)
"r+" => lecture et écriture éventuelle
"w+" => écriture avec RAZ et lecture éventuelle
"a+" => ajout et lecture éventuelle
plus la lettre "b" à rajouter quand on travaille dans le monde Windows et qu'on veut travailler sur des fichiers binaires (des fichiers non-texte) => "rb", "wb", "ab", "r+b", "w+b", "a+b"
 
5) Voir les remarques de Matafan


Message édité par Sve@r le 12-04-2005 à 09:55:46
n°1043999
Emmanuel D​elahaye
C is a sharp tool
Posté le 12-04-2005 à 12:09:31  profilanswer
 

Sve@r a écrit :

plus la lettre "b" à rajouter quand on travaille dans le monde Windows et qu'on veut travailler sur des fichiers binaires (des fichiers non-texte) => "rb", "wb", "ab", "r+b", "w+b", "a+b"


Rien à voir avec Windows ou pas. "b" indique toujours et de façon portable que le fichier est binaire (raw), même en unixoïde... Le fait que sous unixoïde, il n'y ait pas de différence visible entre fichiers binaires et fichiers texte est un détail d'implémentation du système Unix, pas une caractéristique du langage C qui n'a que faire du système.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Svp aider un débutant en C ^^

 

Sujets relatifs
[JAVA] débutant & setvisibledebutant : Affichage variable dans url- problème d'accents
debutant comment faire plusieurs Login et PassComment faire cette Animation Flash SVP > Coloriage
pb class [débutant]Vraiment besoin d'aide SVP :') !!!! Récupérer vidéo JT
Isoler les bits d'un octets [Débutant inside]SQL | Requete de débutant, mais je bug !!!
debutant: quel ide et version je jdk choisir?(débutant) enregistrer des données via un formulaire
Plus de sujets relatifs à : Svp aider un débutant en C ^^


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR