Erreur de case

Résolu/Fermé
lily_5957 Messages postés 2 Date d'inscription jeudi 8 août 2019 Statut Membre Dernière intervention 8 août 2019 - 8 août 2019 à 11:03
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 10 août 2019 à 11:18
Bonjour...!
Je suis débutante en programmation C. Je me suis donné pour objectif de faire plus d'efforts et m'améliorer dans ce langage. Ainsi, je m'amuse à créer de petits programmes comme la mini calculatrice à fonctionnalités basiques qui n'effectue que des opérations sur des nombres entiers naturels.
Voici notamment le code de ce programme :
 #include <stdio.h>
#include <stdlib.h>

int choix, a, b, add, sous, mul, divi;

void message1()
	{
		printf("Donnes maintenant le premier nombre entier de preference s'il te plait \n");
		scanf("%d\n", &a);
		printf("A = %d\n", a);
		printf("Donnes maintenant le deuxieme nombre entier de preference s'il te plait \n");
		scanf("%d\n", &b);
		printf("B = %d\n", b);
		return;
	}


int main()
	{
		
		printf(" \n");
		
		printf("Quelle operation veux-tu effectuer ? \n\n * Appuie 1 pour une addition \n * Appuie 2 pour une soustraction \n * Appuie 3 pour une multiplication \n * Appuie 4 pour une division \n");
		
		scanf("\n %d",&choix);
		
		if(choix == 1){
			printf("Tu veux faire une addition.\n\n");
			message1();
			add = (a + b);
			printf("\n *** >-<  Le resultat vaut : %d  >-< *** \n", add);
			
		}
		if(choix == 2){
			printf("Tu veux faire une soustraction. \n\n");
			message1();
			sous = (a - b);
			printf("\n *** >-<  Le resultat vaut : %d  >-< *** \n", sous);
		}
		if(choix == 3){
			printf("Tu veux faire une multiplication. \n\n");
			message1();
			mul = (a *b);
			printf("\n *** >-<  Le resultat vaut : %d  >-< *** \n", mul);
		}
		if(choix == 4){
			printf("Tu veux faire une division. \n\n");
			message1();
			divi = (a / b);
			printf("\n *** >-<  Le resultat vaut : %d  >-< *** \n", divi);
		}		
	}

Alors, le problème survient après compilation et exécution du programme. Précisement après la phrase "Donnes maintenant le premier nombre entier de preference s'il te plait". Je suis obligé d'entrer deux chiffres x et y avant qu'il n'affiche A = x.

Vient ensuite la deuxième phrase où j'entre un chiffre k. Mais il me revient B = y au lieu de B = k.

Voici une image pour illustrer mieux mes propos :



Pouvez-vous m'aider à comprendre mon erreur et surtout en me proposant une solution au problème ?
Merci d'avance de me répondre.

2 réponses

peperonie06 Messages postés 236 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 25 août 2020 21
8 août 2019 à 11:49
salut
essaye de mettre un "." sur tes lignes printf après %d
comme ça:
scanf("%d.\n", &a);

si ça ne marche pas, essaye d'initialiser tes valeurs pour tester
0
lily_5957 Messages postés 2 Date d'inscription jeudi 8 août 2019 Statut Membre Dernière intervention 8 août 2019
8 août 2019 à 12:02
Merci pour ton aide peperonie06 !
Cela marche. Cela marche enfin !
0
peperonie06 Messages postés 236 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 25 août 2020 21
8 août 2019 à 12:18
pas de soucis ^^
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
10 août 2019 à 11:18
L'erreur est ligne 25. Dans un format de
scanf
on met ce que l'on veut lire, il ne faut pas mettre de
\n
.
Mettre un
.
après le format est un moyen de rattraper une sauce. On aurait aussi bien pu mettre un
X
ou un
#
. Le
scanf
va tenter de vérifier l'égalité :
caractère suivant == '#'
. Et donc va forcer une lecture du caractère suivant (qui ici est un
\n
) et l'éjecter du buffer de lecture. On utilise souvent l'ajout d'une espace en fin de format, cette notation a un sens plus puissant : lire tous les caractères qui suivent tant qu'ils correspondent à des caractères non imprimables. Donc va "vider" les espaces, tabulations, CarriageReturn, LineFeed, VerticalTab, ... qui pourraient traîner à la fin.
0