C 自动售货机-只接受硬币

C 自动售货机-只接受硬币,c,C,我在做自动售货机模拟器。我只需要接受真实的硬币,比如(0.05欧元/0.10欧元/0.20欧元等等),我不想要0.25欧元 代码1: if(coin!= 0.05|| coin!= 0.10 || coin!= 0.20 || coin!= 0.50 || coin!= 1 || coin!= 2 ) printf("It isnt a coin"); else return coin; 代码2(这也是牙线的原因): 代码1或代码2都不起作用。。。co

我在做自动售货机模拟器。我只需要接受真实的硬币,比如(0.05欧元/0.10欧元/0.20欧元等等),我不想要0.25欧元

代码1:

if(coin!= 0.05||  coin!= 0.10 || coin!= 0.20 || coin!= 0.50 || coin!= 1 || coin!= 2 )
        printf("It isnt a coin");
    else
        return coin;
代码2(这也是牙线的原因):


代码1或代码2都不起作用。。。code2接受0.05硬币,但忽略其他硬币

您需要在您的子句中使用ANDs,而不是ORs


例如:
coin!=1 | |硬币!=2
总是正确的。

通过声明一系列可接受的硬币,自动售货机上的现金槽可以轻松修改为可接受1或2美分硬币或未来的5欧元硬币

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

int acceptable [] = {5, 10, 20, 50, 100, 200};

// return 1 if acceptable coin
int test_coin (int cents) {
    int num_accept = sizeof(acceptable) / sizeof(int);  
    int index;
    for (index=0; index<num_accept; index++)
        if (cents == acceptable[index])
            return 1;
    printf ("Unacceptable coin\n");
    return 0;
    }

int main()
{
    int cents;
    char str [10];
    do {
        printf ("Enter coin value in cents ");
        *str = 0;
        fgets (str, 10, stdin);
        cents = atoi(str);
    } while (!test_coin(cents));
    printf("You inserted %d cents coin\n", cents);
    return 0;
}
#包括
#包括
int可接受[]={5,10,20,50,100,200};
//如果可以接受,请返回1
整数测试币(整数分){
int num_accept=sizeof(可接受)/sizeof(int);
整数指数;

对于(index=0;index您需要
&&
而不是
| |
未来开发的一大技巧:除非您的应用程序需要处理分数货币,否则不要使用浮点值表示货币。例如,以欧元为单位,最低面值是1美分的欧元。请使用g整数。@KenoguLabz,无论您是否需要分数货币,定点精度或任意精度都是货币等数量最合适的表示形式。如果您需要千分之一精度,则您的数量可以表示单个千分之一。@BrianCain您不会创建收银机吗HAT是千分之几的精确值,因为登记处的所有交易都是舍入到整分值。在作出彻底假设之前考虑一下您的域名。上面的自动售货机示例是只处理离散的量化货币输入的完美例子。浮点被设计为近似于CONTI。数值的个数,而不是具有非常精确含义的量化值。比较浮点数是否相等总是一个坏主意。
#include <stdio.h>
#include <stdlib.h>

int acceptable [] = {5, 10, 20, 50, 100, 200};

// return 1 if acceptable coin
int test_coin (int cents) {
    int num_accept = sizeof(acceptable) / sizeof(int);  
    int index;
    for (index=0; index<num_accept; index++)
        if (cents == acceptable[index])
            return 1;
    printf ("Unacceptable coin\n");
    return 0;
    }

int main()
{
    int cents;
    char str [10];
    do {
        printf ("Enter coin value in cents ");
        *str = 0;
        fgets (str, 10, stdin);
        cents = atoi(str);
    } while (!test_coin(cents));
    printf("You inserted %d cents coin\n", cents);
    return 0;
}