编写自动售货程序,while 语句不会中断?

Posted

技术标签:

【中文标题】编写自动售货程序,while 语句不会中断?【英文标题】:Writing a Vending program, while statement won't break? 【发布时间】:2014-03-31 22:19:55 【问题描述】:

我是 C 新手,很了解 python,但我在一些基本的事情上苦苦挣扎,这真的很令人沮丧,因为我似乎无法确定我的代码在哪里没有让 while 循环中断,直到它达到数字我假设与缓冲区有关,然后它会满足我程序中的每个条件,有人有一些见解吗?

这是我插入 10 时得到的输出:

Welcome to the Soda Vending Machine
All sodas cost $1.50 each
This machine accepts the following coins:
nickel = 5, dime = 10, quarter = 25, half-dollar = 50, dollar = 100
Please use the numeric value corresponding to each coin
10
Amount depositied so far: $ 32767
Amount depositied so far: $ 32777
Amount depositied so far: $ 32777
Amount depositied so far: $ 32777
Amount depositied so far: $ 32777
Invalid Coin
Dispensing soda ...
Your change is: Half dollar quarter dime nickel







int main(void)

int coin;
int totalcoin;
char *change = "Your change is:" ;
printf("Welcome to the Soda Vending Machine\n===================================\nAll sodas cost $1.50 each\nThis machine accepts the following coins:\nnickel = 5, dime = 10, quarter = 25, half-dollar = 50, dollar = 100\nPlease use the numeric value corresponding to each coin\n");
while (totalcoin < 150)
    printf("Deposit a Coin: ");
    scanf("%d", &coin);
    if ( coin == 5)
        totalcoin = totalcoin + 5;
        printf("Amount depositied so far: $ %d\n", totalcoin);
    if (coin == 10)
        totalcoin = totalcoin + 10;
        printf("Amount depositied so far: $ %d\n", totalcoin);
    if (coin == 25)
        totalcoin = totalcoin + 25;
        printf("Amount depositied so far: $ %d\n", totalcoin);
    if (coin == 50)
        totalcoin = totalcoin + 50;
        printf("Amount depositied so far: $ %d\n", totalcoin);
    if (coin == 100)
        totalcoin = totalcoin + 100;
        printf("Amount depositied so far: $ %d\n", totalcoin);
    if (coin != 5 || coin !=10 || coin !=25 || coin !=50 || coin !=100)
        printf("Invalid Coin\n");
printf("Dispensing soda ...\n");
printf("Your change is: ");
if (totalcoin > 50)
    totalcoin -= 50;
    printf("Half dollar");
if (totalcoin >= 25)
    totalcoin -= 25;
    printf(" quarter");
if (totalcoin >= 10)
    totalcoin -= 10;
    printf(" dime");
if (totalcoin >= 5)
    totalcoin -= 5;
    printf(" nickel");

【问题讨论】:

【参考方案1】:
if ( coin == 5)
    totalcoin = totalcoin + 5;
    printf("Amount depositied so far: $ %d\n", totalcoin);

缩进并没有显示它的真正作用。它实际上相当于:

if ( coin == 5)

    totalcoin = totalcoin + 5;

printf("Amount depositied so far: $ %d\n", totalcoin);

这不是你的意思,你应该使用块:

if ( coin == 5)

    totalcoin = totalcoin + 5;
    printf("Amount depositied so far: $ %d\n", totalcoin);

作为最佳实践,有些人选择始终在 ifforwhile 等之后使用块,即使块中只有一条语句。它不易出错,尤其是当您需要向其中添加更多语句时。

【讨论】:

注意while循环也有同样的问题。此外,totalcoin 没有被初始化。局部变量在 C 中不默认为 0。 @happydave 你是对的。如果OP遵循这个最佳实践,可以避免while中的同样问题,但是未初始化的局部变量肯定是一个问题,我希望他解决这个问题后可以自己调试。 我明白了,谢谢!我知道添加 很简单,一开始就问我觉得很愚蠢-.- 一旦我意识到为什么要在每个语句周围添加 ,我就计算了局部变量并设置了它,但是非常感谢你们,谢谢!

以上是关于编写自动售货程序,while 语句不会中断?的主要内容,如果未能解决你的问题,请参考以下文章

do..while 循环中的继续和中断语句错误

为啥这个 switch 语句在运行时会结束 while 循环?

while循环时非法中断语句

if语句C ++期间意外中断

为 C++ 编写不递增的 Taste 测试程序

JavaSE-基本程序设计结构(下)