Problème de code en C
Fermé
maxidrones
Messages postés
11
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
13 février 2014
-
30 janv. 2014 à 11:47
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 2 févr. 2014 à 20:10
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 2 févr. 2014 à 20:10
A voir également:
- Problème de code en C
- Le code ascii en informatique - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
2 réponses
alfredeneumeuh
Messages postés
9
Date d'inscription
mercredi 29 janvier 2014
Statut
Membre
Dernière intervention
30 janvier 2014
1
30 janv. 2014 à 12:17
30 janv. 2014 à 12:17
Je vois plusieurs erreurs :
- tu lis les données deux fois mais tu stocke tout dans player[0], ça devrait plutôt être player[i] (pareil pour le printf à la fin)
- il ne faut pas mettre de '\n' dans le format de scanf, sinon il attend une ligne supplementaire (donc il faut appuyer 2 fois sur entrée)
- le plus grave : les variables de type char[] sont déjà des pointeurs donc il ne faut pas mettre le & : scanf("%s", player[i].nom) - ça c'est vrai pour les chaines, pas pour les nombres (scanf("%d", &player[i].age est correct)
(bon d'accord les pointeurs en C c'est compliqué, mais faut pas se décourager, tout le monde s'est cassé les dents dessus avant de comprendre :)
enfin, un truc à savoir : scanf c'est bien pour s'amuser mais en vrai c'est TRES dangereux (un petit malin peut faire toute sortes de choses en entrant des données incorrectes, comme un nom de plus de 100 caractères par exemple). Le problème c'est qu'il n'existe pas de solution portable, donc là ça dépend du compilateur et de la plateforme...
- tu lis les données deux fois mais tu stocke tout dans player[0], ça devrait plutôt être player[i] (pareil pour le printf à la fin)
- il ne faut pas mettre de '\n' dans le format de scanf, sinon il attend une ligne supplementaire (donc il faut appuyer 2 fois sur entrée)
- le plus grave : les variables de type char[] sont déjà des pointeurs donc il ne faut pas mettre le & : scanf("%s", player[i].nom) - ça c'est vrai pour les chaines, pas pour les nombres (scanf("%d", &player[i].age est correct)
(bon d'accord les pointeurs en C c'est compliqué, mais faut pas se décourager, tout le monde s'est cassé les dents dessus avant de comprendre :)
enfin, un truc à savoir : scanf c'est bien pour s'amuser mais en vrai c'est TRES dangereux (un petit malin peut faire toute sortes de choses en entrant des données incorrectes, comme un nom de plus de 100 caractères par exemple). Le problème c'est qu'il n'existe pas de solution portable, donc là ça dépend du compilateur et de la plateforme...
siham CPGE
Messages postés
4
Date d'inscription
dimanche 2 février 2014
Statut
Membre
Dernière intervention
25 février 2014
2 févr. 2014 à 12:33
2 févr. 2014 à 12:33
vous devez changer player[0] par player[i] comme ça vous pouvez stockez les donnez des deux joueurs
en plus pour stockez les caractères nom et prénom adresse du joueur c'est pas la paine d'etulisez "&" car les champs ( player[0].nom,player[0].prenom,player[0].adresse)sont les noms des tableaux(pointeurs
et pour stockez les char des chaines de caractere c'est mieux d'etuliser la fonction gets(par exemple gets(player[i].nom)
en plus pour stockez les caractères nom et prénom adresse du joueur c'est pas la paine d'etulisez "&" car les champs ( player[0].nom,player[0].prenom,player[0].adresse)sont les noms des tableaux(pointeurs
et pour stockez les char des chaines de caractere c'est mieux d'etuliser la fonction gets(par exemple gets(player[i].nom)
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
2 févr. 2014 à 15:35
2 févr. 2014 à 15:35
Bonjour
Une précision avant de lire encore et encore de la confusion entre pointeurs et tableaux.
1-Un tableau et une zone mémoire pouvant accueillir N éléments de type correspondant aux tableaux
2->Un pointeur est une zone mémoire qui contient l'adresse d'une autre zone mémoire.
Si tous les deux éléments présentent un principe d'accès apparenté au pointeur ce n'est pas la même chose en déclarant
l'utilisation abusive de ces termes fausse la compréhension du principe pointeur et tableaux.
Une précision avant de lire encore et encore de la confusion entre pointeurs et tableaux.
1-Un tableau et une zone mémoire pouvant accueillir N éléments de type correspondant aux tableaux
2->Un pointeur est une zone mémoire qui contient l'adresse d'une autre zone mémoire.
Si tous les deux éléments présentent un principe d'accès apparenté au pointeur ce n'est pas la même chose en déclarant
char cInfo[]= "BONJOUR";cala veut dire que l'en crée un tableau de type char de 8 caractères qui est totalement différents de
char *pInfo;
l'utilisation abusive de ces termes fausse la compréhension du principe pointeur et tableaux.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 2/02/2014 à 17:26
Modifié par fiddy le 2/02/2014 à 17:26
siham CPGE,
et pour stockez les char des chaines de caractere c'est mieux d'etuliser la fonction gets(par exemple gets(player[i].nom)
N'importe quoi ! gets() est obsolète et ne doit jamais être utilisé. gets() est aussi dangereux qu'un scanf() mal utilisé... Il vaut mieux utiliser fgets()... Ou alors bien savoir utilisé scanf().
Un petit lien :
http://fiddy.free.fr/blog/index.php?post/2008/11/22/Le-C,-pas-si-facile-que-%C3%A7a
et pour stockez les char des chaines de caractere c'est mieux d'etuliser la fonction gets(par exemple gets(player[i].nom)
N'importe quoi ! gets() est obsolète et ne doit jamais être utilisé. gets() est aussi dangereux qu'un scanf() mal utilisé... Il vaut mieux utiliser fgets()... Ou alors bien savoir utilisé scanf().
Un petit lien :
http://fiddy.free.fr/blog/index.php?post/2008/11/22/Le-C,-pas-si-facile-que-%C3%A7a
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
2 févr. 2014 à 20:10
2 févr. 2014 à 20:10
lol
30 janv. 2014 à 13:05
30 janv. 2014 à 13:12
30 janv. 2014 à 13:31
player[0]
player[1]
(si tu suis la première remarque de alfredeneumeuh)
30 janv. 2014 à 13:34
Pour ta question :
"pour le scanf quelle autre option y a-t-il?"
tu peux lire cette page pour comprendre les difficultés liées à la lecture d'un nombre et disposer de solutions portables : https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284385&answer=1043372399
et ce lien pour la lecture d'une ligne de texte : https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044652485&id=1043284385
Dal
30 janv. 2014 à 13:57