Après un scanf, rien ne se passe!

Résolu/Fermé
Bouzed - 10 mars 2009 à 22:24
 Bouzed - 11 mars 2009 à 20:23
Bonjour,
je suis en train de créer un petit programme tout bête, mais quand je dois entrer une donnée(avec scanf), j'appuie sur ENTER, mais là, rien ne se passe! Par contre si j'écris quelque chose, après avoir entré ma donnée et appuyé sur ENTER, là, l'action suivante se déroule...Mais lorsque j'arrive au prochain scanf, il prend ce que j'avais écrit après les ENTER pour confirmer le premier scanf...

Voilà, j'espère avoir été clair, même si je n'en ai pas l'impression XD, merci d'avance à ceux qui m'aideront!
A voir également:

6 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
10 mars 2009 à 22:36
poste ton code ça sera plus simple de t'aider
0
Voici le programme, il s'agit d'une calculatrice mais pour l'instant, il n'y à que l'addition :



#include <stdio.h>
#include <stdlib.h>

int main()
{
long nombre1 = 0, nombre2 = 0, operation = 0, resultat = 0, rien = 0;

printf("Quel operation?\n\n");
printf("1. Addition\n\n");
printf("2. Soustraction\n\n");
printf("3. Multiplication\n\n");
printf("4. Division\n\n");
scanf("%ld\n\n", &operation); // Ici j'entre le chiffre 1 et appuie sur ENTER mais je dois réentrer un chiffre et réappuyer sur ENTER pour continuer

if (operation == 1)
{
printf("Quels chiffre voulez-vous additionner?\n ");
scanf("%ld", &nombre1); // Pour ce chiffre, la machine utilise le chiffre que j'ai dû entrer avent pour pouvoir continuer
scanf("%ld\n\n", &nombre2); // Ici tout se passe normalement
resultat = nombre1 + nombre2;
printf("%ld + %ld = %ld", nombre1, nombre2, resultat);
}
return 0;
}
0
halloran Messages postés 45 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 12 mars 2009
11 mars 2009 à 18:58
salut,


tu devrait commencer ton programme de cette facon (évident chacun peut programmer comme cela lui plait)
mais l'utilisation du switch rends ton programme plus propre, et evitera d'éventuelles erreures.


#include <stdio.h>
#include <stdlib.h>

//******************************************************************//
//****************** définition des variables *******************************//
//******************************************************************//

int choix;
long nbr1, nbr2, resultat;

//**********************************************************************//
//********************** programme principale *******************************//
//**********************************************************************//

int main(int argc, char *argv[])
{
printf("=========== ma premiere calculette =============\n\n");
printf("1. adition\n");
printf("2. soustraction\n");
printf("3. division\n");
printf("4. multiplication\n\n");
printf("donner le numero correspondant a l operation souhaitee\n");
scanf("%d",&choix);
switch (choix)
{
case 1:
printf("vous avez choisit d executer une adition \n");
break;
case 2:
printf("vous avez choisit d executer une soustraction \n");
break;
case 3:
printf("vous avez choisit d executer une division \n");
break;
case 4:
printf("vous avez choisit d executer une multiplication \n");
break;
default:
printf("mauvais choix \n");
break;
}


pour le choix de l'opération un simple if suffit

/* if choix == 1) // on choisit l'adition

tu demande tes chiffres , tu calcul et tu affiche le résultat
*/

essaie et tien nous au courant

a+
romain m.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > halloran Messages postés 45 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 12 mars 2009
11 mars 2009 à 19:11
Les variables globales ont plusieurs inconvénients.
Il est donc conseillé de définir des variables locales et de les envoyer en arguments pour les récupérer dans d'autres fonctions si besoin il y a.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
11 mars 2009 à 19:13
scanf("%ld\n\n", &operation);
Le problème vient d'une mauvaise utilisation du scanf. Il ne faut pas mettre de '\n'.

Utilise donc plutôt :
scanf("%ld", &operation);

De même pour
scanf("%ld", &nombre2);

Cdlt
0
Ok je vais essayer vos réponses ( surtout la "refonte" de mon programme qu'on m'a conseillé)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Donc voilà j'ai fais comme vous m'avez dis(pas \n après scanf, meilleure utilisation du switch ect...), mais là, j'ai un problème : quand je fais mon addition, j'écris les deux chiffres à additionner, mais au moment de faire le calcule il me sort quelque chose du genre " 3224455 + 5365346 = 85483875" alors que j'avais demandé quelque chose comme 24 + 15!

Donc je vous mets mon programme, avec un meilleur interface :


#include <stdio.h>
#include <stdlib.h>

int main()
{
long nombre1 = 0, nombre2 = 0, operation = 0, resultat = 0, choix = 0;

printf("============Bienvenue dans ma calculatrice============\n\n\n");
printf("Voici les operations a choix : \n\n\n");
printf("1. Addition\n\n");
printf("2. Soustraction\n\n");
printf("3. Multiplication\n\n");
printf("4. Division\n\n");
printf("Tapez le chiffre correspondant et pressez ENTER : ");
scanf("%ld", &choix);

switch (choix)
{
case 1:
printf("\n\n\nVous avez choisi l'addition.\n\n");
break;
case 2:
printf("\n\n\nVous avez choisi la soustraction.\n\n");
break;
case 3:
printf("\n\n\nVous avez choisi la multiplication.\n\n");
break;
case 4:
printf("\n\n\nVous avez choisi la division.\n\n");
}

if (choix == 1)
{
printf("Choisissez le premier nombre a additionner : ");
scanf("%ld", &nombre1);
printf("Choisissez le deuxieme nombre a additionner : ");
scanf("%ld", &nombre2);
resultat = nombre1 + nombre2;
printf("\n\nVoici le calcule : %ld + %ld = %ld", &nombre1, &nombre2, &resultat);
}

return 0;
}
0
Désolé, le problème se trouve ici :

printf("\n\nVoici le calcule : %ld + %ld = %ld", &nombre1, &nombre2, &resultat);


J'ai mis un & dans un printf, mais quelle andouille que je fais!


Maintenant, il marche très bien!

Merci à tout le monde!
0