Erreur de case [Résolu/Fermé]

Signaler
Messages postés
2
Date d'inscription
jeudi 8 août 2019
Statut
Membre
Dernière intervention
8 août 2019
-
Messages postés
494
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
23 novembre 2020
-
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

Messages postés
236
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
25 août 2020
16
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
Messages postés
2
Date d'inscription
jeudi 8 août 2019
Statut
Membre
Dernière intervention
8 août 2019

Merci pour ton aide peperonie06 !
Cela marche. Cela marche enfin !
Messages postés
236
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
25 août 2020
16
pas de soucis ^^
Messages postés
494
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
23 novembre 2020
63
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.