我正试着做一个边做边循环。我正在尝试获取用户输入,只要用户输入的数字长度小于13位或大于16位。
例子:
1234(4位)将再次运行do-while循环,
123493919295919(14位)将停止循环。
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
int n;
int nDigits;
do
{
n = get_int("Please enter your credit card number:\n");
nDigits = floor(log10(abs(n))) + 1;
}
while (nDigits < 13 || nDigits > 16);
}
最佳答案
你的系统中int
是什么?是4字节(32位)吗?nDigits
对于具有32位的类型int
,将始终小于11(我的意思是等于INT_MAX
的2147483647
只给出10
),因此条件为真(因为(nDigits < 13 || nDigits > 16)
给出true OR false
,即true
)。
因此,请考虑更改数据表示的类型。
选项:char[17]
要存储最多16个字符的字符串(在字符串内部,您可以检查所有字符是否为数字,请参阅isdigit)uint64_t
表单<stdint.h>
(似乎没有负数卡号)