私は自動販売機をシミュレートしようとしています。私のプログラムは、入力された金額を価格としてコマンドラインから受け取り、プログラムが中止されるまでプロンプトを表示し続けます。私は間違っていなければならないことがわかっているwhile-doループを通してこれを達成しようとしています。私はコインの書き込み量を挿入した後でも、コインへの入力を促し続けるプログラムが必要です。 Eが選択されるまで、Cコードが無限のdo-whileループに詰まっています
$ pop 225
Price must be from 10 to 100 cents
$ pop 86
Price must be a multiple of 5.
$ pop 50
Welcome to my Vending Machine!
Pop is 50 cents. Please insert nickels, dimes, or quarters.
Enter coin [NDQ]:d
You have inserted a dime
Please insert 40 more cents.
Enter coin [NDQ]:d
You have inserted a dime
Please insert 30 more cents.
Enter coin [NDQ]:d
You have inserted a dime
Please insert 20 more cents.
Enter coin [NDQ]:d
You have inserted a dime
Please insert 10 more cents.
Enter coin [NDQ]:d
You have inserted a dime
Pop is dispensed. Thank you for you business! Please come again.
Enter coin [NDQ]
が終わり、それはコインを入力することができることにまでさかのぼるかを参照してください。コマンドラインを表し - $:
コードが遵守のようになります方法の例は、これがあります出る。私はこれをしようとしているが、私のコードは、N、D、またはQの初期入力時に無限ループに詰まっている。ありがとうございました!あなたの中の状態で
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define NI 5
#define DI 10
#define QU 25
bool isValid(int num) {
return (num >= 10 && num <= 100);
}
bool isMultiple(int num) {
return (num % 5 == 0);
}
int
main (int argc, char *argv[])
{ for (int i = 1; i != argc; ++i) {
int price = atoi(argv[i]);
if (!isValid(price)) {
printf("Price muse be from 10 cents to 100 cents.\n");
break;
} else if (!isMultiple(price)) {
printf("Price must be a multiple of 5.\n");
break;
} else {
printf(" Welcome to my Vending Machine!\n");
printf("Pop is %d cents. Please enter nickels, dimes, or quarters\n", price);
char coin;
do
{
printf(" PLease enter a coin [NDQR]\n");
scanf (" %c", &coin);
int cents = 0;
while (cents <= price) {
if (coin == 'N'|| coin == 'n') {
cents = cents + NI;
printf(" You have inserted 5 cents\n");
}
else if (coin == 'd' || coin == 'D') {
cents = cents + DI;
printf("You have inserted 10 cents\n");
}
else if (coin == 'Q' || coin == 'q') {
cents = cents + QU;
printf("You have entered 25 cents\n");
} else {
printf("Unknown coin. Rejected.\n");
}
int balance = price - cents;
printf("You have entered a total of %d cents\n", cents);
if (balance > 0) {
printf("You must enter %d more cents\n", balance);
} else {
int change = cents - price;
int dimes = change/10;
int remainder = change % 10;
int nickles = remainder/5;
int remainder2= nickles % 5;
printf("Change returned. %d nickles and %d dimes",nickles, dimes);
}
}
} while (coin != 'E' && coin != 'e');
printf("DONE!\n");
return 0;
}
}
}
'coin!= 'E' ||コイン!=「e」は常に真です。 –
Eを入力するまでループするようにするにはどうすればよいですか? – JVAN
[De Morganの法則](https://en.wikipedia.org/wiki/De_Morgan%27s_laws)をご覧ください – fvu