从文件流中读取值到数组(C)

时间:2016-04-19 19:46:05

标签: c

我一直在想这个问题。我得到了这项任务,说明如下:

有一个包含数字的文本文件。 (MIN,MAX,NUMBER) 我必须读取文件的内容,然后在MIN和MAX之间生成一个随机数。如果生成的数字与数字匹配,则打印"匹配。"

MIN:7 MAX:17 NUMBER:15 ...

我能够将每个数字读入一个数组,使用以下代码:

int main(void)
{
    srand(time(NULL));
    int nums[50] = {0};
    int i = 0;
    FILE * fp;
    /*if(fp == NULL) return 1;*/

    if (fp = fopen("numbers.txt", "r")) {
        while (fscanf(fp, "%d", &nums[i]) != EOF) {
            ++i;
        }
        fclose(fp);
    }

    for (--i; i >= 0; --i)
        printf("num[%d] = %d\n", i, nums[i]);

    return 0;
    }

但是,我不知道如何继续。如何将特定值分配给我的随机数生成器函数?

int random(int min, int max) {
    return rand()%(max-min+1)+min;
}

1 个答案:

答案 0 :(得分:0)

解决方案 -

您不应该使用数组,因为您不需要存储数字,只需要查看它们一次即可完成任务。一读到数字,我们就可以在约束内计算一个随机数。我们这样做:

MaterialVM

可以改进您的代码的其他一些问题:

  • 你在使用int main(void) { srand(time(NULL)); int nums[50] = {0}; int min = 0, max = 0, match= 0; FILE * fp; fp = fopen("numbers.txt", "r") if(fp == NULL) { return 1; } // Compare the return value of fscanf to 3 to make sure // three values were read in from the file during each // iteration. while (fscanf(fp, "%d %d %d", &min, &max, &match) == 3) { if(random(min, max) == match) { printf("Match.\n"); } else { //No match! } } fclose(fp); return 0; } int random(int min, int max) { return rand() % (max - min + 1) + min; } 做什么?我没有看到它被使用,所以我会把它拿出来用于这段代码。不需要额外的分心。

    srand
  • 为什么要将srand(time(NULL)); // Removing this line. 初始化为nums?它的目的不明确,你应该保持原状。

    {0}

也可以是:

int nums[50] = {0};
  • 我们可以通过以下方式清理文件打开的初始部分:

    int nums[50];
    

对此:

/*if(fp == NULL) return 1;*/

if (fp = fopen("numbers.txt", "r")) {
    ...
}