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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 oct. 2017 à 09:38
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 oct. 2017 à 09:38
A voir également:
- Petit problème de C
- Petit colis distribution ✓ - Forum Consommation & Internet
- Excel trier du plus grand au plus petit - Guide
- J'ai un petit 1 dans messenger qui s'affiche mais pas de message comment effacer ce 1 - Forum Facebook Messenger
- Petit 2 clavier iphone ✓ - Forum iPhone
- Petit coeur blanc ✓ - Forum Réseaux sociaux
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
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
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
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
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
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
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
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; }