我一直在想这个问题。我得到了这项任务,说明如下:
有一个包含数字的文本文件。 (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;
}
答案 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")) {
...
}