C语言 我是否正确地使用了typedef结构和数组来读取我的文件?它无法打开

omqzjyyz  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(98)

我是一个初学者在数据结构与C,我采取了C编程,但我只触及了一点点的结构在这门课上,我没有跟上它。
无论如何,我正在尝试做一个程序,它将从一个文件中读取数据到一个结构数组中,并打印出您填充的数组的内容。我需要帮助来解决这个问题......老实说,我也不太确定我是否做得正确......:/
任何帮助都非常感谢,并提前感谢你!:)
这是我目前所尝试的
下面是我的代码:
仅供参考-我尝试打开的文件是DataFile.txt

#include<stdio.h>
#include <stdlib.h>
#define SIZE 10
#define ARRAY_SIZE 30

//Struct contains 3 fields, name, age, salary
typedef struct
{
    char name[SIZE];
    int age;
    int salary;
} data;

data a[ARRAY_SIZE];
FILE * fp = fopen("DataFile.txt", "r");

if (fp == NULL)
{
    printf("Error %s.\n", strerror(errno));
    exit(1);
}

int GetData()
{
    int i = 0;

    fscanf(fp, "%s", a[i].name);
    while(fp && i<ARRAY_SIZE)
    {
    fscanf(fp, "%d", &a[i].age);
    fscanf(fp, "%d", &a[i].salary);
    i++;
}

return i;
}

void ShowData( int records_read)
{
    //Print text file data on screen
    for(int i=0;i<records_read;i++)
    {
    printf("%s %d %d\n", a[i].name, a[i].age, a[i].salary);
    }
}

int main()
{
    char name[256];
    int i = 0;
    int records_read;

    //Call the method, getData
    i = GetData();

    //Prompt and read input from the user
    printf("Pick a number from 1 to 10:");
    scanf("%d", &records_read);

    //Call the method, showData
    ShowData(records_read);

    fclose(fp);

    return 0;
}

如果我不把这部分代码放进去,程序就能工作:

FILE * fp = fopen("DataFile.txt", "r");

if (fp == NULL)
{
    printf("Error %s.\n", strerror(errno));
    exit(1);
}

但是输出只是一个零的列表。

vh0rcniy

vh0rcniy1#

快速回答:首先,尝试将FILE * fp = fopen("DataFile.txt", "r");拆分为两部分,一部分是变量声明FILE * fp = NULL;,另一部分是赋值表达式fp = fopen("DataFile.txt", "r");,然后将变量声明部分保留在所有函数之外,而将赋值部分和if语句if (fp == NULL){...}都移到函数GetData()中,代码可能在这种情况下工作。

相关问题