有没有办法检查用户输入是否为 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 号码和信用卡号码等长数字存储为字符串,即使它们仅由数字组成。这样,您就不必担心 int
或 long long
.
的数值限制
当我 运行 这个程序时,我的 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 号码和信用卡号码等长数字存储为字符串,即使它们仅由数字组成。这样,您就不必担心 int
或 long long
.