首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用函数验证安全代码的C程序

使用函数验证安全代码的C程序
EN

Stack Overflow用户
提问于 2021-10-17 04:19:40
回答 1查看 64关注 0票数 0

我正在尝试写一个使用Luhn算法来验证安全代码的程序。程序需要:

从文件中读取安全代码并将其输入到数组中

使用一个函数读取安全代码

使用另一个函数来验证它们

为了验证它们,奇数位中的数字将被加在一起。偶数位的数字将乘以2;一旦乘以2,如果数字小于10,则将其添加到偶数的和中;如果大于10,则将该数字的数字的和添加到偶数的和中。因此,如果数组中第二个位置的数字是8,则将其乘以2得到16,然后将1+6=7加到evens的和上。还有更多的代码需要验证,但这是我现在正在做的部分。

我遇到的问题:我不认为我从文件中扫描代码的函数是正确的。文件中的每个代码都有20位数,所以当我声明数组变量时,我这样做了: int sc20。然而,有超过一个20位数的安全代码,我不确定如何解决它。

第二点:我不知道如何计算evens的第二部分(如果数字乘以2大于10,那么它的数字就会加到evens的和上)。

这是文件的前几行(整个文件非常长,所以我只列出了前几行):

代码语言:javascript
复制
0 7 6 1 1 6 6 2 6 8 5 1 5 5 7 7 7 8 0 2 

2 5 1 6 2 1 8 2 4 3 0 9 1 9 1 1 3 1 3 8
 
1 3 3 4 5 4 5 2 8 6 1 8 9 3 7 6 2 2 0 5 

这是我到目前为止的代码:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

ReadSecurityCode(FILE* codes, int sc[]);

int main(void) {
    int sc[20], i;
    FILE* codes;

    codes = fopen("SecurityCodes.txt", "r");

    while (fscanf(codes, "%c\n", &sc) != EOF) {
        ReadSecurityCode(codes, sc[20]);
    }

    fclose(codes);
    return(0);
}


int ReadSecurityCode(FILE* codes, int sc[]) {
    int i;
    for (i = 0; i < 20; i++) {
        fscanf(codes, "%d", &sc[i]);
    }
    return(sc[20]);
}


int isCodeValid(int sc[]) {
    int i, sumodds = 0, sumevens = 0, sumtotal;
    for (i = 1; i < 20; i = i + 2) {
        sumodds = sumodds + sc[i];
    }
    
    for (i = 0; i < 20; i = i + 2) {
        sc[i] = sc[i] * 2;
        if (sc[i] < 10) {
            sumevens = sumevens + sc[i];
        }
        else {

        }
    }
    return(sumtotal);
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-17 04:47:24

最简单的选择是边走边读取并验证每一行。在您发布的代码中,这意味着在while循环中调用isCodeValid(),您可以在其中读取记录:

代码语言:javascript
复制
    while (fscanf(codes, "%c\n", &sc) != EOF) {
        ReadSecurityCode(codes, sc);
        isCodeValid(sc);
    }

考虑使用char而不是int来存储每个数字(即char sc[20])。

我不确定为什么ReadSecurityCode返回第一个元素,但是scanf()可能会失败,所以您可能希望返回一个错误代码并检查它。另外,我建议您使用ReadSecurityCode()来读取包含换行符的行。

您可能还想根据isCodeValid()的返回值执行一些操作。is命名建议您返回一个布尔值,但您返回的是一个sum。

有了上述建议,它将是:

代码语言:javascript
复制
   while (!ReadSecurityCode(codes, sc)) {
      if (!isCodeValid(sc)) {
           printf("%s is invalid\n", sc);
      }
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69601296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档