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