Erreur de case

Résolu
lily_5957 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   -
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 237 Statut Membre 21
 
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   Statut Membre Dernière intervention  
 
Merci pour ton aide peperonie06 !
Cela marche. Cela marche enfin !
0
peperonie06 Messages postés 237 Statut Membre 21
 
pas de soucis ^^
0
Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   101
 
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