检查每个数字是否可被2整除

时间:2019-03-05 20:47:58

标签: c arrays

我正在编写一个C程序,要求用户输入密码,并检查数字中的每个数字是否可被2整除。例如,如果他们输入123452,它将告诉用户这是错误的,因为1, 2,3,5不能被2整除。如果我输入642642,就可以了,但是如果我在622248中输入,它会显示无效数字,这是错误的,因为622248中的每个数字都可以被2整除。错误?

convertToMap

2 个答案:

答案 0 :(得分:4)

如果允许您将输入处理为字符串而不是整数,则只需strspn来确定引脚中数字的有效性,strlen即可确定有效性的长度:

#include <string.h>

size_t len = strlen(str_pin);
if (len <= 6 && strspn(str_pin, "24680") == len)
{
    puts("Valid pin");
}
else
{
    puts("Invalid pin");
}

答案 1 :(得分:2)

您如何存储数字有问题:

for (i = 6; i >= 0; i--) {
    digits[i] = num % 10;
    num = num / 10; 
}

数组digits的长度为6,这意味着有效索引从0到5,但是您开始读入索引6。这将超出调用undefined behavior的数组的范围。 / p>

更改循环以从5开始。

for (i = 5; i >= 0; i--) {
    digits[i] = num % 10;
    num = num / 10; 
}

此检查也无效:

if (digits[N] > 6) {

因为它再次读取了数组的末尾。即使它没有读到结尾,您也要检查数组的元素是否大于6,而不是是否有超过6位数字。

您将num除以10来循环获得数字,因此,如果该值不为零,则表示数字太多。

if (num > 0) {