c - 基本结构 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);
}
解决方案
我认为这是您要问的实际问题:
不应该在 int get 函数中我要读取什么文件或输入?
听懂你的英语有点难,但我想你是在问get()
你应该编写的函数如何确定从哪个文件读取数据。
目前尚不清楚您的讲师期望什么,但由于函数的参数不包含文件名,因此有两种主要选择:
使用预先确定的文件名。这有很多变体,但最简单的是将字符串文字传递给
fopen()
,如下所示:FILE *telephone = fopen("telephone.txt");
使用指向文件名的文件范围变量(有时被误导性地称为“全局”变量)来传达数据。
get()
在调用函数之前,使用用户提示的数据、程序参数或其他来源的数据,适当地设置变量。
推荐阅读
- c# - 在运行时更改 MVC 中的验证消息
- system-verilog - 为什么 uvm_tlm_fifo 需要 put_export 和 get_peek_export?
- macos - 在 MacOS 上将 OpenSSL 更新到 1.1.1
- csv - 如何修复 java.io.IOException:(第 1 行)封装的令牌和带有 Spark Dataframe 的分隔符之间的无效字符
- reactjs - MaterialUI TextField 使用文本转换选择
- java - 使用 Spring Boot Security 在 REST API 中强制执行正确的 API 密钥和 JWT 用户令牌
- node.js - 这是令牌认证的更好方法。JWT 或任何其他方法
- python - 如何在不添加新行的情况下写入文本文件
- java - 如何从Java中的整数和长列表中返回一个范围内的随机值
- html - 保持无法创建垂直滚动条且无法剪辑的纵横比框