programme c pour un simple distributeur automatique de billets à l'aide de if et else if
Je ne suis pas en mesure de savoir où est l'erreur. Lorsque j'essaie d'exécuter le programme, Sa ne va pas passer le choix et va directement à la fin du programme, après avoir demandé pour le choix. Et, c'est aussi de donner un avertissement à "Montrer la sortie à partir de construire" dans le compilateur visual c++. Quelqu'un peut-il m'aider, s'il vous plaît?
#include <stdio.h>
int main ()
{
int card_number, choice, withdraw, deposit;
float amount = 3000.00, new_amount = 0;
char password;
printf("Enter the card number: ");
scanf("%d", &card_number);
printf("Enter the Password: ");
scanf(" %c", &password);
printf("\n\n");
printf("\n\t***********************************");
printf("\n\t* MENU *");
printf("\n\t* 1. Check Balance *");
printf("\n\t* 2. Withdraw *");
printf("\n\t* 3. Deposit *");
printf("\n\t* 4. Exit *");
printf("\n\t* *");
printf("\n\t***********************************");
printf("\n\n");
printf("Enter your choice: ");
scanf("%d", &choice);
if (choice == 1)
{
printf("Current balance on your account: %f\n", amount);
}
else if (choice == 2)
{
printf("Enter the amount you want to withdraw: ");
scanf("%d", &withdraw);
if (withdraw > amount)
{
printf("You don't have sufficient balance");
}
else
{
new_amount = amount - withdraw;
printf("Current balance on your account: %f\n", new_amount);
}
}
else if (choice == 3)
{
printf("Enter the amount you want to deposit: ");
scanf("%d", &deposit);
amount = amount + deposit;
printf("Current balance on your account: %d\n", amount);
}
else if (choice == 4)
{
printf("Thank you for using our service\n\n");
}
return 0;
}
- j'ai essayé votre code, et sa semble bien pour moi. essayez de déboguer(f10)
Vous devez vous connecter pour publier un commentaire.
avant de lire le type de caractère de cette
fflush(stdin);
ou ne
fflush
est uniquement pour les flux de sortie.Je suppose que vous voulez le mot de passe à plus d'un caractère, de sorte que vous besoin d'une "chaîne" pas un seul
char
. Malheureusement, C ne dispose pas d'un type de chaîne, mais il ne avoir des tableaux dechar
qui est assez bon. Au lieu de demander un personnage à l'aide descanf("%c",&password);
, vous devez demander une "chaîne" viascanf("%s",&password);
. Cependant,password
doit être définie comme un tableau dechar
assez long pour contenir le mot de passe.[1]La raison de ce qui est à l'origine de votre programme à "sauter à la fin" c'est parce que la
%c
ne lit un caractère d'entrée. Vous avez probablement tapé plusieurs personnages. Plus tard dans le programme que vous avez tenté de lire unint
via%d
qui pourrait ne pas consommer les chiffres de votre mot de passe et, par conséquent, lascanf()
appels échoué, mais vous n'avez pas de vérifier la valeur de retour de ces appels de sorte que votre code ne connaissent pas les échecs.[1] en Fait,
password
doit être suffisamment long pour contenir tout ce que l'utilisateur décide d'entrer. Vraiment, vous devriez enquêter sur l'utilisation du format largeurs comme%20s
pour prévenir tableau des dépassements, qui constituent une sérieuse faille de sécurité. Mais puisque c'est un devoir à la maison, nous supposerons que ces sortes de détails ne sont pas vraiment important pour le moment.gets(password)
aura tout de même des questionsscanf
a. En général, le C "string" la bibliothèque est cassé à partir d'un point de vue sécurité. Si vous voulez vraiment essayer de le faire "à droite", l'utilisationfgets()
, il a une longueur de paramètre pour empêcher les dépassements de la mémoire tampon.Le code suivant devrait résoudre votre problème: