Programmation C : gros blocage !
Fermé
Maryy
-
3 janv. 2002 à 13:05
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 28 oct. 2007 à 14:12
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 28 oct. 2007 à 14:12
A voir également:
- Programmation C : gros blocage !
- Application de programmation - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Problème de programmation digicode extel klavy 3 ✓ - Forum Loisirs / Divertissements
- Programmation binaire - Guide
- Programmation carte à puce vierge ✓ - Forum Matériel & Système
7 réponses
Bobinours
Messages postés
2898
Date d'inscription
jeudi 26 avril 2001
Statut
Membre
Dernière intervention
21 mars 2013
504
3 janv. 2002 à 13:36
3 janv. 2002 à 13:36
Quel est exactement ton problème ?
-= Bobinours =-
-= Bobinours =-
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
5 janv. 2002 à 23:05
5 janv. 2002 à 23:05
je te conseillerai d'utiliser un type structure pour ecrire sur ton fichier qui sera un fichier a acces direct(donc une cle s'impose).
par exemple:
typedef char chaine[100];
struct personne
{
chaine nom,prenom,adresse;
int num;
};
et il saisit suivant ce que tu veux q'il inscrive et tu enregistre la structure ds ton fichier en retenant son numero qui sera uniq.
num n'est qu'un exemple, par exemple apres chaq saisie tu incrementes num et enregistres la structure(mais je ne sais pas si tu dois enregistrer un a un les champs).J'ai jamais fait
tafiscobar
par exemple:
typedef char chaine[100];
struct personne
{
chaine nom,prenom,adresse;
int num;
};
et il saisit suivant ce que tu veux q'il inscrive et tu enregistre la structure ds ton fichier en retenant son numero qui sera uniq.
num n'est qu'un exemple, par exemple apres chaq saisie tu incrementes num et enregistres la structure(mais je ne sais pas si tu dois enregistrer un a un les champs).J'ai jamais fait
tafiscobar
En fait, oui, j'ai créé une structure et le numéro unique, c'est le numéro insee du salarié. L'écriture se passe bien, c'est à la lecture que ça marche pas comme je le voudrais. Je vous envois le fichier "salaries.c", le prog n'est pas complet mais peut-être que vous trouverez des erreurs ou quelque chose qui cloche. En fait, dans ce fichier, si on écrit un nom composé (donc séparé par un espace), il ne prend en compte que la partie du nom qui est avant l'espace. Il y a ici la structure et deux fonctions qui permettent d'ajouter des fiches salariés et de lire les fiches salariés.
struct salarie
{
int num_sal; //numéro de sécurité sociale
char prenom[50];
char nom[70];
int salaire;
char ancien_total[4]; //rep = oui ou non
char ancien_ent[4]; //rep = oui ou non
};
//struct salarie list[nbsal];
struct salarie list[50];
FILE *fps;
void ajout_sal()
{
int i;
int ch;
fps=fopen("salaries.txt", "a");
printf("combien voulez-vous ajouter de salaries ?\n");
scanf("%d", &ch);
//for (i=0; i<nb_sal(nbsal); i++)
for (i=0; i<ch; i++)
{
printf("\nEnregistrement des salaries :\n");
printf("-----------------------------\n");
printf("Numero Securite Sociale : ");
scanf("%d", &list[i].num_sal);
printf("Prenom : ");
scanf("%s", list[i].prenom);
printf("Nom : ");
getchar();
gets(list[i].nom);
printf("Salaire : ");
scanf("%d", &list[i].salaire);
printf("Anciennete totale superieure a 24 mois ? : ");
scanf("%s", list[i].ancien_total);
printf("Anciennete dans l entreprise superieure a 12 mois ? : ");
scanf("%s", list[i].ancien_ent);
getchar();
//fwrite(&list, sizeof(list), 1, fps);
fprintf(fps, "%d %s %s %d %s %s\n", list[i].num_sal, list[i].prenom, list[i].nom, list[i].salaire, list[i].ancien_total, list[i].ancien_ent);
}
fclose(fps);
}
void lire_sal()
{
char nomch[70];
int i=0;
int compar, ancien1, ancien2;
char ok[4]="oui";
fps=fopen("salaries.txt", "r");
printf("choisissez le nom du salarie a consulter : ");
scanf("%s", &nomch);
getchar();
for (i=0; i<5; i++)
{
//fread(&list,sizeof(list), 1, fps);
fscanf(fps, "%d %s %s %d %s %s", &list[i].num_sal, &list[i].prenom, &list[i].nom, &list[i].salaire, &list[i].ancien_total, &list[i].ancien_ent);
compar=strcmp(nomch, list[i].nom);
if (compar == 0)
{
printf("\nIdentite du salarie :\n");
printf("Numero Securite Sociale : %d\n", list[i].num_sal);
printf("Prenom : %s\n", list[i].prenom);
printf("Nom : %s\n", list[i].nom);
printf("Salaire : %d\n", list[i].salaire);
ancien1=strcmp(ok, list[i].ancien_total);
ancien2=strcmp(ok, list[i].ancien_ent);
printf("Anciennete suffisante pour un stage : ");
if ((ancien1 == 0) && (ancien2 == 0))
{
printf("oui\n");
}
else
{
printf("non\n");
}
}
}
fclose(fps);
}
struct salarie
{
int num_sal; //numéro de sécurité sociale
char prenom[50];
char nom[70];
int salaire;
char ancien_total[4]; //rep = oui ou non
char ancien_ent[4]; //rep = oui ou non
};
//struct salarie list[nbsal];
struct salarie list[50];
FILE *fps;
void ajout_sal()
{
int i;
int ch;
fps=fopen("salaries.txt", "a");
printf("combien voulez-vous ajouter de salaries ?\n");
scanf("%d", &ch);
//for (i=0; i<nb_sal(nbsal); i++)
for (i=0; i<ch; i++)
{
printf("\nEnregistrement des salaries :\n");
printf("-----------------------------\n");
printf("Numero Securite Sociale : ");
scanf("%d", &list[i].num_sal);
printf("Prenom : ");
scanf("%s", list[i].prenom);
printf("Nom : ");
getchar();
gets(list[i].nom);
printf("Salaire : ");
scanf("%d", &list[i].salaire);
printf("Anciennete totale superieure a 24 mois ? : ");
scanf("%s", list[i].ancien_total);
printf("Anciennete dans l entreprise superieure a 12 mois ? : ");
scanf("%s", list[i].ancien_ent);
getchar();
//fwrite(&list, sizeof(list), 1, fps);
fprintf(fps, "%d %s %s %d %s %s\n", list[i].num_sal, list[i].prenom, list[i].nom, list[i].salaire, list[i].ancien_total, list[i].ancien_ent);
}
fclose(fps);
}
void lire_sal()
{
char nomch[70];
int i=0;
int compar, ancien1, ancien2;
char ok[4]="oui";
fps=fopen("salaries.txt", "r");
printf("choisissez le nom du salarie a consulter : ");
scanf("%s", &nomch);
getchar();
for (i=0; i<5; i++)
{
//fread(&list,sizeof(list), 1, fps);
fscanf(fps, "%d %s %s %d %s %s", &list[i].num_sal, &list[i].prenom, &list[i].nom, &list[i].salaire, &list[i].ancien_total, &list[i].ancien_ent);
compar=strcmp(nomch, list[i].nom);
if (compar == 0)
{
printf("\nIdentite du salarie :\n");
printf("Numero Securite Sociale : %d\n", list[i].num_sal);
printf("Prenom : %s\n", list[i].prenom);
printf("Nom : %s\n", list[i].nom);
printf("Salaire : %d\n", list[i].salaire);
ancien1=strcmp(ok, list[i].ancien_total);
ancien2=strcmp(ok, list[i].ancien_ent);
printf("Anciennete suffisante pour un stage : ");
if ((ancien1 == 0) && (ancien2 == 0))
{
printf("oui\n");
}
else
{
printf("non\n");
}
}
}
fclose(fps);
}
ali_camarche
Messages postés
31
Date d'inscription
dimanche 11 novembre 2001
Statut
Membre
Dernière intervention
12 février 2002
>
Maryy
6 janv. 2002 à 12:38
6 janv. 2002 à 12:38
rebonjour
bien sure pour la lecture aulieu de fwrite c'est fread;
Merci.
bien sure pour la lecture aulieu de fwrite c'est fread;
Merci.
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
>
Maryy
6 janv. 2002 à 12:58
6 janv. 2002 à 12:58
tu sais strcmp, compare ce qu'il considere etre la chaine, or par defaut, il considere qu'1e chaine s'arrete par defaut au premier espace, a moins de specifier au compilateur que l'ecriture de la chaine peut contenir de l'espace,donc il faut utiliser une fonction qui lui permet de savoir que tu vas peut etre saisir de l'espace, en C++, c'est la methode getline de l'objet cin, ex:
cin.getline(variable, taille de la variable,'\n');
('\n' est le caractere de fin)
donc pour saisir le nom, tu fais:
cin.getline(liste[i].nom,100,'\n');
Sinon, essaie toujours ce qu'a dit ali, avec fread, ça devrait marcher puisque le compila
tafiscobar
cin.getline(variable, taille de la variable,'\n');
('\n' est le caractere de fin)
donc pour saisir le nom, tu fais:
cin.getline(liste[i].nom,100,'\n');
Sinon, essaie toujours ce qu'a dit ali, avec fread, ça devrait marcher puisque le compila
tafiscobar
Maryy
>
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
6 janv. 2002 à 13:17
6 janv. 2002 à 13:17
J'ai suivi le conseil d'Ali et ça ne marchait toujours pas. En fait, y'a aussi que j'avais mis scanf pour récupérer le nom du salarié à chercher. Je l'ai remplacé par un gets et ça passe impeccable. Je vous remercie à tous les deux, je crois que je vais pouvoir avancer pas mal cet aprèm !
Tafiscobar, au fait, c'est pas en C++ que je veux faire mon prog, c'est en C, donc pas de cin ou cout. Je n'ai donc pas testé ta solution mais je la garde sous le coude, ça pourrait bien me dépanner quand je vais devoir faire mon appli en C++ ! ;)
Merci !!!
Tafiscobar, au fait, c'est pas en C++ que je veux faire mon prog, c'est en C, donc pas de cin ou cout. Je n'ai donc pas testé ta solution mais je la garde sous le coude, ça pourrait bien me dépanner quand je vais devoir faire mon appli en C++ ! ;)
Merci !!!
ali_camarche
Messages postés
31
Date d'inscription
dimanche 11 novembre 2001
Statut
Membre
Dernière intervention
12 février 2002
6 janv. 2002 à 12:27
6 janv. 2002 à 12:27
bonjour
Moi pour ce grand probleme, je vous conseil d'ajouter que puisque
vous avez utilise un stricture de taille fixe (sizeof(struct salarie))
alors pourquoi vous n'ajoutez pas un salarie comme ca:
fwrite(&list[i],sizeof(struct salarie), 1, fps);
aulieu de: fprintf(fps, "%d %s %s %d %s %s\n", list[i].num_sal,
list[i].prenom, list[i].nom, list[i].salaire, list[i].ancien_total,
list[i].ancien_ent);
et de lire comme ca:
fwrite(&list[i],sizeof(struct salarie), 1, fps);
aulieu de: fscanf(fps, "%d %s %s %d %s %s", &list[i].num_sal,
&list[i].prenom, &list[i].nom, &list[i].salaire,
&list[i].ancien_total, &list[i].ancien_ent);
Normalement ca va marche.Informe moi du resultat.
Amicalement Ali.
Moi pour ce grand probleme, je vous conseil d'ajouter que puisque
vous avez utilise un stricture de taille fixe (sizeof(struct salarie))
alors pourquoi vous n'ajoutez pas un salarie comme ca:
fwrite(&list[i],sizeof(struct salarie), 1, fps);
aulieu de: fprintf(fps, "%d %s %s %d %s %s\n", list[i].num_sal,
list[i].prenom, list[i].nom, list[i].salaire, list[i].ancien_total,
list[i].ancien_ent);
et de lire comme ca:
fwrite(&list[i],sizeof(struct salarie), 1, fps);
aulieu de: fscanf(fps, "%d %s %s %d %s %s", &list[i].num_sal,
&list[i].prenom, &list[i].nom, &list[i].salaire,
&list[i].ancien_total, &list[i].ancien_ent);
Normalement ca va marche.Informe moi du resultat.
Amicalement Ali.
sbareau
Messages postés
13
Date d'inscription
mardi 3 avril 2001
Statut
Membre
Dernière intervention
10 juin 2002
7 janv. 2002 à 11:18
7 janv. 2002 à 11:18
salut,
tu peux aussi donner un format a ton fichier : une taille constante par champs ainsi ton fichier est correctement structure.
et du coup tu as :
fprintf(fps, "%6d%30s%30s%6d%6s%6s\n", list[i].num_sal,
list[i].prenom, list[i].nom, list[i].salaire, list[i].ancien_total,
list[i].ancien_ent);
fscanf(fps, "%6d%30s%30s%6d%6s%6s\n", &list[i].num_sal,
&list[i].prenom, &list[i].nom, &list[i].salaire,
&list[i].ancien_total, &list[i].ancien_ent);
steph
tu peux aussi donner un format a ton fichier : une taille constante par champs ainsi ton fichier est correctement structure.
et du coup tu as :
fprintf(fps, "%6d%30s%30s%6d%6s%6s\n", list[i].num_sal,
list[i].prenom, list[i].nom, list[i].salaire, list[i].ancien_total,
list[i].ancien_ent);
fscanf(fps, "%6d%30s%30s%6d%6s%6s\n", &list[i].num_sal,
&list[i].prenom, &list[i].nom, &list[i].salaire,
&list[i].ancien_total, &list[i].ancien_ent);
steph
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
curley
Messages postés
6
Date d'inscription
samedi 27 octobre 2007
Statut
Membre
Dernière intervention
28 octobre 2007
27 oct. 2007 à 22:26
27 oct. 2007 à 22:26
Bonjour à vous,
Je suis débutant en programmation C. Je suis à l'heure actuelle en train de faire un exercice. J'ai rédigé le programme et cela bloque quand je fais la compilation. Est-ce que quelqu'un pourrait m'aider !
Curley
Je suis débutant en programmation C. Je suis à l'heure actuelle en train de faire un exercice. J'ai rédigé le programme et cela bloque quand je fais la compilation. Est-ce que quelqu'un pourrait m'aider !
Curley
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
28 oct. 2007 à 02:25
28 oct. 2007 à 02:25
Puisqu'il s'agit d'un nouveau problème merci d'ouvrir un nouveau post. Ensuite si tu veux qu'on ait une chance de t'aider à comprendre d'où vient ton erreur de compilation, il faut au moins nous donner le code source que tu essayes de compiler.
Bonne chance
Bonne chance
SmallFitz
Messages postés
351
Date d'inscription
dimanche 21 octobre 2007
Statut
Membre
Dernière intervention
21 juin 2013
185
28 oct. 2007 à 02:09
28 oct. 2007 à 02:09
Salut !
Tu viens de remonter un topic datant de janvier, et ton sujet n'a rien a voir avec ça !
Je pense qu'il serait préférable que tu en crée un nouveau bien à toi xD.
EDIT :
Tu viens de créer 3 topics les mêmes !!! Arrêtes t'es pas tout seul ok ?
http://www.commentcamarche.net/forum/affich 3884361 gros blocage pour prog c#0
http://www.commentcamarche.net/forum/affich 2095088 debutant en programmation c en probleme#0
Tu viens de remonter un topic datant de janvier, et ton sujet n'a rien a voir avec ça !
Je pense qu'il serait préférable que tu en crée un nouveau bien à toi xD.
EDIT :
Tu viens de créer 3 topics les mêmes !!! Arrêtes t'es pas tout seul ok ?
http://www.commentcamarche.net/forum/affich 3884361 gros blocage pour prog c#0
http://www.commentcamarche.net/forum/affich 2095088 debutant en programmation c en probleme#0
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
28 oct. 2007 à 14:12
28 oct. 2007 à 14:12
:)
3 janv. 2002 à 15:22
J'ai pourtant utilisé un gets() pour récupérer les données, c'est à la lecture que ça marche mal.