Probleme sur type char en c
milou43
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
ydurce Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
ydurce Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train de faire un programme de gestion d'une classe d'élève en c. pour cela j'ai fait une structure avec a l'intérieur la variable avis ou l'utilisateur est censé saisir une phrase, le problème c'est que je me suis aperçu que "char" s'arrête au niveau des espaces. je voulais donc savoir s'il existait quelque chose qui puisse solutionner mon probleme. j'espère que j'ai été assez clair sinn dsl... merci d'avance.
je vous mets ci dessous un partie de mon code :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#define Imax 10
struct Personne
{
char nom[20];
char prenom[20];
float moyenne;
char avis[100];
};
/*Prototypes fonctions et procédures de l'algorithme */
int Menu();
void AjoutEleve (Personne _eleve[Imax], int *nbrEleve );
.....
int i;
int Choix;
float Moy;
int nbrEleve;
...
/* Procédure AjoutEleve */
void AjoutEleve (Personne _eleve[Imax], int *nbrEleve )
{
int i;
printf("Combien voulez-vous ajouter d'eleve\n\n");
scanf("%d", &*nbrEleve);
for(i=1;i<=*nbrEleve;i++)
{
printf("\neleve %d\n", i);
printf(" Indiquez son nom\n\n");
scanf("%s", &_eleve[i].nom);
printf(" Indiquez son prenom\n\n");
scanf("%s", &_eleve[i].prenom);
printf(" Indiquez sa moyenne de l'année\n\n");
scanf("%f", &_eleve[i].moyenne);
printf(" Veuillez formuler votre avis sur l'eleve\n\n");
scanf("%s", &_eleve[i].avis);
}
}
je suis en train de faire un programme de gestion d'une classe d'élève en c. pour cela j'ai fait une structure avec a l'intérieur la variable avis ou l'utilisateur est censé saisir une phrase, le problème c'est que je me suis aperçu que "char" s'arrête au niveau des espaces. je voulais donc savoir s'il existait quelque chose qui puisse solutionner mon probleme. j'espère que j'ai été assez clair sinn dsl... merci d'avance.
je vous mets ci dessous un partie de mon code :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#define Imax 10
struct Personne
{
char nom[20];
char prenom[20];
float moyenne;
char avis[100];
};
/*Prototypes fonctions et procédures de l'algorithme */
int Menu();
void AjoutEleve (Personne _eleve[Imax], int *nbrEleve );
.....
int i;
int Choix;
float Moy;
int nbrEleve;
...
/* Procédure AjoutEleve */
void AjoutEleve (Personne _eleve[Imax], int *nbrEleve )
{
int i;
printf("Combien voulez-vous ajouter d'eleve\n\n");
scanf("%d", &*nbrEleve);
for(i=1;i<=*nbrEleve;i++)
{
printf("\neleve %d\n", i);
printf(" Indiquez son nom\n\n");
scanf("%s", &_eleve[i].nom);
printf(" Indiquez son prenom\n\n");
scanf("%s", &_eleve[i].prenom);
printf(" Indiquez sa moyenne de l'année\n\n");
scanf("%f", &_eleve[i].moyenne);
printf(" Veuillez formuler votre avis sur l'eleve\n\n");
scanf("%s", &_eleve[i].avis);
}
}
A voir également:
- Probleme sur type char en c
- Clear type - Guide
- Coco char - Accueil - Réseaux sociaux
- Type de ram - Guide
- Comment changer le type de fichier - Guide
- Click-n-type - Télécharger - Vie quotidienne
3 réponses
quelques petites remarques sur le style:
- "&*nbrEleve" est équivalent à "nbrEleve" qui est un pointeur sur un int
- "&_eleve[i]." peut s'écrire "_eleve[i]->" qui est plus habituel.
- tester "*nbrEleve "par rapport à "Imax" pour éviter un dépassement de tableau
- en C, les indices d'un tableau de dim n vont de 0 à n-1.
bonne soirée
- "&*nbrEleve" est équivalent à "nbrEleve" qui est un pointeur sur un int
- "&_eleve[i]." peut s'écrire "_eleve[i]->" qui est plus habituel.
- tester "*nbrEleve "par rapport à "Imax" pour éviter un dépassement de tableau
- en C, les indices d'un tableau de dim n vont de 0 à n-1.
bonne soirée
Il vaut mieux utiliser fgets : char *fgets (char *s, int size, FILE *stream);
Cdlt,
Si chaine est défini comme char chaine[255] alors scanf("%s",chaine) est à éviter au même titre que gets(chaine).
Il faudrait utiliser scanf("254s",chaine)
C'est pour ça qu'on décommande l'utilisation de scanf pour les chaînes de caractère quand on débute et qu'on recommande fgets. Après, avec fgets, il ne faut pas non plus oublier de vider le buffer clavier s'il le faut.