C 如何将外部文件中的数据导入我的程序

C 如何将外部文件中的数据导入我的程序,c,C,我正在尝试以FIFO方式实现页面替换算法 因为看起来输入至少要有数千个整数,所以我做了它 在文本格式的文件中 (例如tr.inp/1206032026000240120603…)但我这里有个问题。。。我不知道如何将这些数字导入到我的程序中,以便FIFO算法能够读取它们并计算出有多少页出错。我试图通过在argc中获取参数,在main()中获取argv来实现这一点,但没有进一步的改进。我在代码中标记了我大部分时间花在代码中解决它的地方。我能做什么 #include <stdio.h> #

我正在尝试以FIFO方式实现页面替换算法

因为看起来输入至少要有数千个整数,所以我做了它 在文本格式的文件中 (例如tr.inp/1206032026000240120603…)但我这里有个问题。。。我不知道如何将这些数字导入到我的程序中,以便FIFO算法能够读取它们并计算出有多少页出错。我试图通过在argc中获取参数,在main()中获取argv来实现这一点,但没有进一步的改进。我在代码中标记了我大部分时间花在代码中解决它的地方。我能做什么

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

#define MAX_SIZE 500000

int fifo();

int refArr[MAX_SIZE];
int str[10];
int tmp[10];
char *chk;
int pgFault_number;
int i, j;
FILE *fp;

int main(int argc, char *argv[])
{
        if(argc!=2)
        {
                perror("<Usage> $fifo file_name.ip");
                exit(1);
        }

        fp=fopen(&argv[1], "rt");
        if(fp==NULL)
        {
          perror("An error occured while opening the file...");
          exit(1);
        }
       //From here
       while(1)
        {
          chk=fgets(str, sizeof(str), fp);
          if(chk==NULL)
                break;
          str[strlen(str)-1]='\0';

          str
       //To here

        pgFault_number=fifo();

        printf("\n no of page faults is : %d",pgFault_number);

        fclose(fp);

        return 0;
}

int fifo(integers from text file..)
{
      TBD
}

<This is the contents of file> there're 50,000 integers in file.
...
1624
1624
1625
1625
1626
1626
1627
1627
1628
1628
1629
1629
1024
1025
1630
1630
896
897
1631
1631
768
769
640
641
1632
1632
512
513
128
129
384
385
...
#包括
#包括
#包括
#定义最大尺寸500000
int fifo();
int-refArr[MAX_SIZE];
int-str[10];
int-tmp[10];
char*chk;
int PGU编号;
int i,j;
文件*fp;
int main(int argc,char*argv[])
{
如果(argc!=2)
{
perror(“$fifo文件_name.ip”);
出口(1);
}
fp=fopen(&argv[1],“rt”);
如果(fp==NULL)
{
perror(“打开文件时出错…”);
出口(1);
}
//从这里
而(1)
{
chk=fgets(str,sizeof(str),fp);
如果(chk==NULL)
打破
str[strlen(str)-1]='\0';
str
//到这里
pgFault_编号=fifo();
printf(“\n页面错误数为:%d”,pgFault\u编号);
fclose(fp);
返回0;
}
int fifo(文本文件中的整数…)
{
待定
}
文件中有50000个整数。
...
1624
1624
1625
1625
1626
1626
1627
1627
1628
1628
1629
1629
1024
1025
1630
1630
896
897
1631
1631
768
769
640
641
1632
1632
512
513
128
129
384
385
...

我将使用
fscanf
而不是
fgets
自动从文件中获取整数值,而不必担心临时字符串缓冲区

int read_value = 0, read_count = 0, pgFault_number = 0;

while(1)
{
  read_count = fscanf(fp, "%d", &read_value);
  if(read_count==EOF)
    break;
  refArr[pgFault_number++] = read_value;
}

然后,数字的计数已经存储在
pgFault\u number

中,因为您有许多整数要读取,并且事先不知道有多少,所以我建议动态为整数列表分配存储。您的输入似乎未格式化,因此Austin Mullins建议使用
fscanf

下面是一个函数,该函数从具有给定文件名的文件中读取整数。如果给定以下文件名,则返回新分配的整数数组,并将其长度写入
*len

int *read_ints_new(const char *fn, int *len)
{
    FILE *f = fopen(fn, "r");
    int *arr = NULL;
    int size = 0;
    int n = 0;

    if (f == NULL) return NULL;

    for (;;) {
        int res, x = 0;

        res = fscanf(f, "%d", &x);

        if (res == EOF) break;
        if (res == 0) fscanf(f, "%*s");
        if (res == 1) {
            if (n >= size) {
                size = size ? 2 * size : 64;
                arr = realloc(arr, size * sizeof(*arr));
                if (arr == NULL) {
                    n = 0;
                    break;
                }
            }
            arr[n++] = x;
        }
    }
    fclose(f);

    arr = realloc(arr, n * sizeof(*arr));

    if (len) *len = n;
    return arr;
}
该函数连续分配更大的内存块,以便读取的所有整数都适合。最后,为了不浪费空间,会分配所需的确切内存量

fscanf
尝试解析和转换整数。如果成功,则返回1,即转换次数。如果到达文件末尾,则返回
EOF
。如果存在解析错误(因为下一个数据字不是整数),它返回0并将文件指针重置到它在尝试解析数字之前离开的位置。因此,我们必须吃光下一个单词(不存储它,这就是´%*s`中的星号的含义),以便跳过非数字项

您可以这样使用此功能:

int *array;
int n, i;

array = read_ints_new("file.txt", &n);
if (array == NULL) return 1;

printf("%d entries:\n", n);

for (i = 0; i < n; i++) {
    if (i) printf(", ");
    printf("%d", array[i]);
}
printf("\n");

free(array);
int*数组;
int n,i;
array=read\u ints\u new(“file.txt”和&n);
if(array==NULL)返回1;
printf(“%d个条目:\n”,n);
对于(i=0;i

请记住在使用后释放带有
free
的已分配数组。

要理解您的实际问题有点困难。您想知道如何在不知道文件中有多少整数的情况下读取文件中的所有整数吗?您的文件看起来是什么样的?请逐字摘录,即usi正在使用{code}样式?@MOehm如果我把你弄糊涂了,很抱歉。我想知道的是如何从文件中获取所有整数(我在文本文件中获得了50K个整数)听上去你可能想要
fscanf
和/或
atoi
。我随时都会打开一个标签。谢谢你的帮助。在我用你的评论弄明白之后,我似乎没有努力去搜索…真是太遗憾了。再次感谢你对我的东西的补充评论,这些评论已经确定了我给了你一些想法。有了你的材料,我让自己思考了一段时间。