Petit problème de C
Résolu
LeProgrammeurdu93
Messages postés
20
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour, je suis débutant en programmation en C. Je voudrais savoir :
Quand je lance mon programme il marche parfaitement, mais au premier scanf que j'ai, il demande 2 nombre en ne comptant que le premier. J'utilise Windows 7 et Code::Blocks.
Voici mon code
Quand je lance mon programme il marche parfaitement, mais au premier scanf que j'ai, il demande 2 nombre en ne comptant que le premier. J'utilise Windows 7 et Code::Blocks.
Voici mon code
int sommeTableau(int tableau[], int tailleTableau);
int main(int argc, char *argv[])
{
int valeur_1 = 0, valeur_2 = 0, valeur_3 = 0, valeur_4 = 0;
printf("Entrez un nombre : \n");
<underline> scanf("%d\n", &valeur_1); // C'est sur ce scanf qu'il demande 2 fois un nombre</underline>
printf("Entrez un deuxieme nombre : \n");
scanf("%d\n", &valeur_2);
printf("Entrez un troisieme nombre : \n");
scanf("%d\n", &valeur_3);
printf("Entrez un dernier nombre : \n");
scanf("%d\n", &valeur_4);
printf("La somme des nombres que vous avez ecrit est : ");
int montab [4] = {valeur_1,valeur_2,valeur_3,valeur_4};
return sommeTableau(montab, 4);
}
int sommeTableau(int tableau[], int tailleTableau)
{
int i = 0, somme_totale = 0;
somme_totale = tableau[i] + tableau[i+1] + tableau[i+2] + tableau[i+3];
printf("%d\n", somme_totale) ;
return 0;
}
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Petit problème de C
- Trier du plus petit au plus grand excel - Guide
- Petit 2 ✓ - Forum Windows
- Petit point vert snap ✓ - Forum Snapchat
- Petit 3 ✓ - Forum Word
- Comment imprimer une photo en petit ✓ - Forum Photo numérique
2 réponses
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.
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
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 :-)
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;
}