有没有办法检查用户输入是否为 16 位数字?

Is there a way to check if an user input is 16 digits?

当我 运行 这个程序时,我的 count 变量只上升到 10,原因我不明白,我希望它上升到 16 以检查用户输入的是否为卡号(16 位)。 我不是特别想查是不是卡号,就是想查是不是16位的。

void payment() {
    int payway;
    int cardnum;
    int count = 0;
    
    printf("Type 1 if you want to pay with card and have a discount or 2 if you want to pay with cash:\n");
    scanf("%d", &payway);
    switch (payway) {
      case 1:
        {
            do {
                printf("Type your CC number:\n");
                scanf("%d", &cardnum);
                while (count != 0) {
                    cardnum = cardnum / 10;
                    count++;
                }
            } while (count != 16);
        }
        break;
    }
}

使用字符串而不是 int 值。 示例:

char c[] = "123";
size_t len = sizeof(c) / sizeof(char);
len--;

因此您可以将数组的大小存储在 var len 中。

scanf("%d", &cardnum);

如果匹配的数字不能表示为 int,即超出范围,则将有未定义的行为。

一个int只能保证能够表示从-32767+32767的数字,尽管在大多数现代平台上,它能够表示从[=19=的数字] 到 +2,147,483,647。无论哪种方式,int 可能都不足以表示 16 位数字。

但是,long long int(或简称 long long)保证能够表示从 -9,223,372,036,854,775,807+9,223,372,036,854,775,807 的数字。这保证足以表示任何 16 位数字。

因此,解决您问题的最简单方法是更改​​线路

int cardnum;

long long cardnum;

并改变

scanf("%d", &cardnum);

至:

scanf("%lld", &cardnum);

但是,通常最好将 phone 号码和信用卡号码等长数字存储为字符串,即使它们仅由数字组成。这样,您就不必担心 intlong long.

的数值限制