【问题标题】:arrays from txt in c (long numbers)c 中来自 txt 的数组(长数字)
【发布时间】:2011-10-16 17:03:24
【问题描述】:

400000000000;499999999999;签证;

50000000;59999999;万事达卡;

67000000;67999999;大师;

字段:1. 范围开始 2. 范围结束,3 名称。

[开始范围] 和 [结束范围] 字段的长度可以是 1 到 16 个字符(数字)。

该计划的目标如下:

第一次请求输入 16 位卡号。

 Card number input, verification and processing use char [n] type (Simbol array)

第二:如果我输入 45000000000,则可以在文本文件中检查与输入的卡号对应的条目,它介于 400000000000 和 499999999999 之间,因此我需要在自动输入名称 VISA 中输入文本。 而且我不能使用 long long 类型......因为我明白我需要使用数组...... 第三次请求以“nnnn.mm”格式输入金额,其中 nnnn-1 到 4 位长的纬度数,但 mm - 2 位数的 santims。

char input[32]; // = "100;200;first";
char name[10];
int min, max, c, i, k;

FILE *file;
file = fopen("gg.txt","r");

i=0;

while ((c=getc(file))!= EOF)
{
    k=(int)c;
    input[i]=k;
    i++;
}

char* result = NULL;
char delims[] = ";";

result = strtok(input, delims);

// atoi() converts ascii to integer.
min = atoi(result);
result = strtok(NULL, delims);
max = atoi(result);

result = strtok(NULL, delims);

strcpy(name, result);

printf("Min=%d, Max=%d, Name=%s\n", min, max, name);
printf("input=%s\n",input);
printf("%d\n",i);

getch();
return 0;

varunl 给我的这段代码适用于小数字(gg.txt 文件的包含是:100;200;first),但是需要 smt else,enybody,可以帮助我吗?

【问题讨论】:

标签: c arrays file


【解决方案1】:

诀窍在于将数字填充为 16 位数字,以便您可以将它们作为字符串进行比较。所以如果你读到这个:

67000000;67999999;MAESTRO;

实际上你必须这样考虑:

0000000067000000;0000000067999999;MAESTRO;

用户输入也是如此。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void FindCCType(const char *pnumber);

int main(int argc, char *argv[])
{
    FindCCType("67000001");
    return 0;
}

#define MAXLENGTH 16

char* PadLeft(const char *pnumber)
{
    char *pnumber2 = (char*)malloc(MAXLENGTH + 1);
    size_t len = strlen(pnumber);

    if (len > MAXLENGTH)
    {
        /* Too many digits in credit card number */
        exit(1);
    }

    strcpy(pnumber2 + MAXLENGTH - len, pnumber);

    char *pbegin = pnumber2, *plast = pnumber2 + MAXLENGTH - len;

    while (pbegin < plast)
    {
        *pbegin = '0';
        pbegin++;
    }

    return pnumber2;
}

void FindCCType(const char *pnumber)
{
    printf("Input: %s\n", pnumber);

    char *pnumber2 = PadLeft(pnumber);

    FILE *file = fopen("gg.txt","r");

    char pline[1000];

    while (fgets(pline, sizeof(pline), file) != NULL)
    {
        if (strlen(pline) + 1 == sizeof(pline)) 
        {
            /* Line too much long */
            exit(2);
        }

        char *pmin = strtok(pline, ";");
        char *pmax = strtok(NULL, ";");
        char *pname = strtok(NULL, ";");

        printf("Min: %s, Max: %s, Name: %s", pmin, pmax, pname);

        char *pmin2 = PadLeft(pmin);
        char *pmax2 = PadLeft(pmax);

        if (strcmp(pnumber2, pmin2) >= 0 && strcmp(pnumber2, pmax2) <= 0)
        {
            printf(" ** FOUND **\n");

            free(pmin2);
            free(pmax2);
            break;
        }

        printf(" ** NO GOOD **\n");

        free(pmin2);
        free(pmax2);
    }

    fclose(file);
    free(pnumber2);
}

【讨论】:

  • @edGGars 你用的是什么编译器?
  • 我是 C 新手,我使用 DEV-C++ 的默认编译器进行编译,但我的任务是不能使用 long long 类型...
  • @edGGars 如果这是作业,并且此时很明显这是作业,您应该编辑您的帖子并添加标签作业。
猜你喜欢
  • 2022-01-08
  • 2014-07-09
  • 2020-10-13
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2020-10-06
相关资源
最近更新 更多