Bonjour a tous !
Voila mon probleme :

Je lis au clavier une chaine qui est longue d'au plus 80 caracteres; ensuite je lis au clavier un caractere.
Le probleme est que ma chaine de caracteres est ensuite tronquee... allez savoir pourquoi ! J'ai passe toute l'heure de cours sur cette erreur mais je n'ai pas trouve la solution.
Un petit detail : pour lire un caractere je devrais utiliser getchar() mais j'utilise fgets(chaine, 2, stdin) pour avoir le caractere et ensuite je met \0 a l'indice 1; ex :
char chaine[2]; fgets(chaine, 2, stdin); chaine[1] = '\0';
ca a l'air un peu bete mais c'est pcq le programme utilise une base de donees et que je dois copier le caractere dans une variable de type CS_CHAR
Bref, ce n'est pas un probleme avec la DB, c'est juste un probleme avec cette chaine tronquee.
Voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
void ajouterRecette () {
	char * description;
	char * type;
	exec sql begin declare section;
		CS_CHAR sqlDescription[80];
		CS_CHAR sqlType[2];
		CS_SMALLINT nb;
	exec sql end declare section;
 
	description = lireDescription();
	if (description == NULL) return;
	type = lireType();
	if (type == NULL) return;
	strcpy(sqlDescription, description);
	strcpy(sqlType, type);
exec sql INSERT INTO Recette VALUES (:sqlDescription, :sqlType);
	exec sql commit;
}
 
char * lireDescription () {
	char description[80];
 
	printf("Description de la recette : ");
	if (fgets(description, 80, stdin) == NULL) {
		printf("Erreur lors de la lecture de la description\n");
		return NULL;
	}
	fflush(stdin);
	return description;
}
 
char * lireType () {
	char type[2];
 
	printf("Type de la recette ('e', 'p', 'd') : ");
	if (fgets(type, 2, stdin) == NULL) {
		printf("Erreur lors de la lecture du type\n");
		return NULL;
	}
	fflush(stdin);
	type[0] = toupper(type[0]);
	if (type[0] != 'E' && type[0] != 'P' && type[0] != 'D') {
		printf("Erreur : type de recette invalide\n");
		return NULL;
	}
	type[1] = '\0';
	return type;
}
le fflush(stdin) est place pour eviter des erreurs du style : si on lis une chaine au clavier, la seconde lecture ne se fait pas, ou plutot elle se deroule comme si qq chose avait ete tapee... bizarre