當我運行這個程式時,我的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;
}
}
uj5u.com熱心網友回復:
線
scanf("%d", &cardnum);
如果匹配的數字不能表示為int,即超出范圍,則將具有未定義的行為。
Anint只保證能夠表示從-32767to的數字 32767,盡管在大多數現代平臺上,它能夠表示從-2,147,483,648to的數字 2,147,483,647。無論哪種方式,anint都可能不足以表示 16 位數字。
但是,保證 a 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);
但是,通常最好將長數字(例如電話號碼和信用卡號碼)存盤為字串,即使它們僅包含數字。這樣,您不必擔心inta 或 a的數值限制long long。
uj5u.com熱心網友回復:
使用字串而不是 int 值。例子:
char c[] = "123";
size_t len = sizeof(c) / sizeof(char);
len--;
因此您可以將陣列的大小存盤在 var len 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412493.html
標籤:
下一篇:C程式以可變精度列印數字
