首页 > 解决方案 > 基本结构 int 获取函数或从文本文件中读取

问题描述

我必须创建函数 int get(struct phone list[ ]); ,它将从文本文件中加载名称和编号。文本文件的长度可以超过 5 个,但我只需要加载其中的 5 个。但是当我把结构改为 char *fname 时,它​​不起作用。不应该在 int get 函数中我要读取什么文件或输入?

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

#define MAX_ARRAY_SIZE 5

struct telephone
{
    char name[30];
    int number;

};

struct telephone list[MAX_ARRAY_SIZE];

int load(char *fname);

int main()
{
    char *fname = "BP";

    load(fname);

    int i = 0;
    int count = 0;
    for (i = 0; i < MAX_ARRAY_SIZE; i++)
    {

        printf("Name and phone is : %s\n %d\n", list[i].name,list[i].number);
        printf("%d\n",count);
        count++;
    }

    return 0;
}

int load(char *fname)
{
    FILE *fp = NULL;
    int  i = 0;

    if ((fp = fopen(fname, "r")) == NULL)
    {
        printf("Error : Unable to open for reading\n");
        return 1;
    }

    while (fscanf(fp, "%s %d", &list[i].name, &list[i].number) != EOF)
    {
        i++;
    }

    fclose(fp);
}

标签: c

解决方案


我认为这是您要问的实际问题:

不应该在 int get 函数中我要读取什么文件或输入?

听懂你的英语有点难,但我想你是在问get()你应该编写的函数如何确定从哪个文件读取数据。

目前尚不清楚您的讲师期望什么,但由于函数的参数不包含文件名,因此有两种主要选择:

  1. 使用预先确定的文件名。这有很多变体,但最简单的是将字符串文字传递给fopen(),如下所示:

    FILE *telephone = fopen("telephone.txt");
    
  2. 使用指向文件名的文件范围变量(有时被误导性地称为“全局”变量)来传达数据。get()在调用函数之前,使用用户提示的数据、程序参数或其他来源的数据,适当地设置变量。


推荐阅读