我正试着做一个边做边循环。我正在尝试获取用户输入,只要用户输入的数字长度小于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_MAX2147483647只给出10),因此条件为真(因为(nDigits < 13 || nDigits > 16)给出true OR false,即true)。
因此,请考虑更改数据表示的类型。
选项:
char[17]要存储最多16个字符的字符串(在字符串内部,您可以检查所有字符是否为数字,请参阅isdigit
uint64_t表单<stdint.h>(似乎没有负数卡号)

09-10 00:18