Programme en c

Résolu/Fermé
s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010 - 8 janv. 2009 à 21:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 janv. 2009 à 15:11
Bonjour,
svp aidez moi je ne sé pas ce qu'il arrive avec mon programme en c : mon programme travail avec les tableau d'enregistrements(livre) et mon probleme c'est que a chaque fois en faisant la saisie , a chaque fois que je tape un string tous se melange dans mon programme et je ne sais pas pour quoi? car kan je fé entré des nbr ça s'execute normalement?..............aidez moi svp

5 réponses

bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
9 janv. 2009 à 00:33
un typedef dans la main() je n'avais jamais vu ça ... enfin bon peut-être que ça marche, je ne teste même pas c'est laid.

Après passage chez l'esthéticien le code devient :

#include <stdio.h>
#include <conio.h>

typedef struct sLivre
{
	int code;
	char titre[3];
	char auteur[3];
	int annee;
} livre;

int main()
{
	livre t[4];
	int i;

	for(i = 0 ; i < 4 ; i++)
	{
		printf("entrez le code,le titre,l'auteur et l'annee : ");
		scanf("%d%s%s%d", &t[i].code, t[i].titre, t[i].auteur, &t[i].annee);
	}
	for(i = 0 ; i < 4 ; i++)
	{
		printf("%d\t%s\t%s\t%d\n", t[i].code, t[i].titre, t[i].auteur, t[i].annee);
	}

	return 0;
}


Ce qui marche très bien chez moi ... je ne sais pas pourquoi ton code plante (peut-être le typedef, ou alors l'appel de fonction avant les déclarations), ou alors serait-ce un test avec des strings de plus de 2 caractères ? Tu définis dans la structure titre[3] ce qui veut dire un titre de 2 caractère maximum (idem pour l'auteur).
1
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
8 janv. 2009 à 21:26
Comment pourrait-on t'aider sans pouvoir en trouver la raison ? Sans ton code ça risque d'être difficile... pour ne pas dire impossible.

Peut-être un scanf("%d", &variable); ce qui fonctionne avec des nombres mais pas avec un string ?
C'est impossible de te répondre sans code ... merci de le copier colller
0
s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010 1
8 janv. 2009 à 21:28
merci de m'avoir répondu mais voila le code:
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
typedef struct livre
{int code;
char titre[3];
char auteur[3];
int annee;
};
livre t [4];
int i;
for (i=0;i<4;i++)
{ printf("entrez le code,le titre,lauteur et lannee");
scanf("%d%s%s%d\n",&t[i].code,t[i].titre,t[i].auteur,&t[i].annee);
}
for(i=0;i<4;i++)
printf("%d\t%s\t%s\t%d\n",t[i].code,t[i].titre,t[i].auteur,t[i].annee);
getch();
}
0
loupius > s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010
8 janv. 2009 à 21:55
Tiens, c'est curieux j'ai déjà vu le même programme il y a quelque temps, son intitulé était:
---> verifiez mon programme en "c"
0
caty > s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010
8 janv. 2009 à 22:07
pour for(i=0;i<3;i++) pars que ta commencer de 0
0
loupius > caty
8 janv. 2009 à 22:17
FAUX!
C'est pas parce qu'il a commencé de 0, auquel cas for(i=1;i<4;i++) serait correct, c'est simplement qu'en C un tableau de 4 éléments à son indice qui va de 0 à 3.
0
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 8 > loupius
8 janv. 2009 à 22:19
oups la fatigue XD
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
9 janv. 2009 à 02:15
Son code ne marche pas tout simplement car il n'a pas précisé le typedef lors de la définition de la struct.
typedef struct livre { ....} livre;
Comme l'a dit bizu53, c'est plus joli de le mettre hors de la fonction, bien que cela ne soit pas obligatoire.

Sinon le prototype de main est int main(void) et non void main(void).

Cdlt
0
s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010 1
9 janv. 2009 à 14:23
pour koi return o?
et pourkoi le slivre?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
9 janv. 2009 à 14:42
return 0; ou n'importe quel autre nombre ... parce que la main() doit retourner un entier.
J'ai mis sLivre mais tu mets ce que tu veux ... c'est ma convention d'écriture à moi pour distinguer rapidement le type "structé" (struct sLivre) du type non "structé" (livre)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843 > bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015
9 janv. 2009 à 14:45
Non, return 0; (valeur de EXIT_SUCCESS) quand ça retourne sans erreur ou 1 (EXIT_FAILURE). ;)
0
s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010 1 > bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015
9 janv. 2009 à 14:48
j'ai compri pr le "o" mais pa vrément pr le "slivre".........commeme j'ai essayé mais ça ne marché pa en execution quand je fé entré des strings je ne sé pa pr koi ?
tous se mélange
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
s.rayene Messages postés 104 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 11 février 2010 1
9 janv. 2009 à 14:57
répondez moi svp?!!!!!!!!!!!!
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
9 janv. 2009 à 15:10
Il n'y a rien à comprendre pour le sLivre ... tu l'appelles comme tu veux !
Et pour tes problèmes de fonctionnement je suis sûr que c'est ce que j'ai dit dans mon autre post.
Qu'essayes-tu ? Écris ce que tu entres au clavier dans le scanf();
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
9 janv. 2009 à 15:11
Ce n'est pas return o; mais return 0; (un zéro).
Sinon, quand tu utilises struct, pour la création de structure, tu dois mettre un nom. Tu donnes celui que tu veux, Toto par exemple.
struct Toto {
...
}

Dans ce cas là, tu devras utiliser struct Toto livre; pour déclarer une variable. Pour éviter de répéter le mot-clé struct, on utilise souvent le mot-clé typedef.
Ce qui donne :
typedef struct Toto {
...
} Livre;

Comme ça, tu as juste à écrire : Livre livre; au lieu de struct Toto livre
Conventionnellement, on utilise une majuscule à la première lettre du nom de la structure comme Livre (et non livre).

Sinon, le programme que t'a donné bizu53 est parfaitement correct. Si ça bug, c'est que tu dois sûrement rentrer des chaînes trop grandes. Et comme tu n'as pas utiliser fgets mais scanf("%s"); ça plantera facilement.

Cdlt
0