Petit problème de C
Résolu/Fermé
LeProgrammeurdu93
Messages postés
18
Date d'inscription
samedi 30 septembre 2017
Statut
Membre
Dernière intervention
17 octobre 2019
-
Modifié le 2 oct. 2017 à 16:09
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 3 oct. 2017 à 09:38
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 3 oct. 2017 à 09:38
2 réponses
Dalfab
Messages postés
703
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
1 mars 2023
100
30 sept. 2017 à 19:29
30 sept. 2017 à 19:29
Bonjour,
Les "%d\n" qui sont dans les
Les "%d\n" qui sont dans les
scanf()attendent un nombre entier (%d) puis une fin de ligne (\n), c'est l'attente de la fin de ligne en plus qui provoque un décalage. Il vaut mieux utiliser " %d" qui extrait un quelconque séparateur s'il est présent, puis lit un nombre.
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
2 oct. 2017 à 13:20
2 oct. 2017 à 13:20
Salut LeProgrammeurdu93,
Tu pourrais aussi améliorer ton code de plusieurs façons.
Par exemple, en déclarant le tableau montab au début de main(), et en l'utilisant pour stocker les valeurs. Cela évite de créer 4 variables additionnelles, et d'initialiser le contenu du tableau avec tes variables.
S'agissant de la fonction sommeTableau(), elle devrait utiliser tailleTableau et une boucle pour être vraiment utilisable sur d'autres tailles, comme le laisse penser son prototype. Par ailleurs, elle pourrait renvoyer la somme au lieu de 0, ce qui te permettra de l'appeler directement en argument du dernier printf du main, et de dissocier les fonctions d'affichage de celles de calcul.
Dal
Tu pourrais aussi améliorer ton code de plusieurs façons.
Par exemple, en déclarant le tableau montab au début de main(), et en l'utilisant pour stocker les valeurs. Cela évite de créer 4 variables additionnelles, et d'initialiser le contenu du tableau avec tes variables.
S'agissant de la fonction sommeTableau(), elle devrait utiliser tailleTableau et une boucle pour être vraiment utilisable sur d'autres tailles, comme le laisse penser son prototype. Par ailleurs, elle pourrait renvoyer la somme au lieu de 0, ce qui te permettra de l'appeler directement en argument du dernier printf du main, et de dissocier les fonctions d'affichage de celles de calcul.
Dal
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
2 oct. 2017 à 15:51
2 oct. 2017 à 15:51
comme scanf travaille sur le flux stdin, autant simplifier aussi le code et l'interface utilisateur en demandant à ce que les 4 entiers soient tapés séparés par des espaces, qui seront consommés par scanf.
cela permettra aussi de valider que l'utilisateur a bien saisi 4 entiers, et n'a pas tapé "toto" ou un nombre décimal, en contrôlant que la valeur de retour de scanf est bien 4, et s'assurant ainsi que l'on a des valeurs correctement initialisées avant de lancer le calcul :-)
cela permettra aussi de valider que l'utilisateur a bien saisi 4 entiers, et n'a pas tapé "toto" ou un nombre décimal, en contrôlant que la valeur de retour de scanf est bien 4, et s'assurant ainsi que l'on a des valeurs correctement initialisées avant de lancer le calcul :-)
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
3 oct. 2017 à 09:38
3 oct. 2017 à 09:38
par exemple, ton main pourrait ressembler à cela :
int main(void) {
int montab[4] = { 0 };
printf("Tapez 4 entiers séparés par des espaces:\n");
if (scanf("%d%d%d%d", &montab[0], &montab[1], &montab[2],
&montab[3]) == 4)
printf("La somme de ces nombres est : %d\n",
sommeTableau(montab, 4));
else
printf("Erreur : vous n'avez pas tapé 4 entiers "
"séparés par des espaces.\n");
return 0;
}