Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将文件读入结构数组?_C_Arrays_File_Struct - Fatal编程技术网

C 如何将文件读入结构数组?

C 如何将文件读入结构数组?,c,arrays,file,struct,C,Arrays,File,Struct,我试图将一个文本文件读入一个结构数组,但当我试图打印该数组时,该结构为空。打印功能工作正常,我认为问题出在getRawData中 struct student { char ID[MAXID + 1]; char f_name[FIRST_NAME_LENGTH + 1]; char s_name[LAST_NAME_LENGTH + 1]; int points[MAXROUNDS]; }; 整数保存(结构学生*h,整数学生) { 字符名[20]; pri

我试图将一个文本文件读入一个结构数组,但当我试图打印该数组时,该结构为空。打印功能工作正常,我认为问题出在getRawData中

struct student
{
    char ID[MAXID + 1];
    char f_name[FIRST_NAME_LENGTH + 1];
    char s_name[LAST_NAME_LENGTH + 1];
    int points[MAXROUNDS];
};


整数保存(结构学生*h,整数学生)
{
字符名[20];
printf(“输入文件名:”);
scanf(“%s”,name);//读入文件名
FILE*output=fopen(名称,“w”);//打开要写入的文件
如果(!输出){
返回-1;//错误
}
对于(int i=0;i

因此,我的目标是从文件中获取数据,并将其写入存储在struct数组中的任何内容。我希望能得到一些帮助,因为我在这方面工作的时间太长了。

请在
getRawData()
中查看此代码,首先您要读取文件以确定总行数:

    while(!feof(outtput))  
    {
        ch = fgetc(outtput);
        if(ch == '\n')
        .....
        .....
因此,文件流指针指向
EOF
,然后在
for
循环中执行以下操作:

    for(i = 0; i < nmemb; i++) {
        fscanf(outtput, "%s %s %s", records[i].f_name, records[i].s_name, records[i].ID);
        .....
        .....
上述程序中的文件读取内容:

Hello Vilho..
How are you!
输出:

Number of lines in file: 2
ch : -1
Now try to read file using fscanf()
fscanf() return value, ch : -1
Resetting the file pointer to the start of file
Reading file..
HelloVilho..Howareyou!
ch : -1
在这里您可以看到,第一个
ch:-1
指示文件指针位于
EOF
,如果您尝试读取,您将获得
EOF
,因为没有剩余的内容可读取。重置文件指针后,您可以看到
fscanf()
能够读取文件


当(!feof(file))
时,不应使用
。检查。

getRawData()
中查看此代码,首先读取文件以确定总行数:

    while(!feof(outtput))  
    {
        ch = fgetc(outtput);
        if(ch == '\n')
        .....
        .....
因此,文件流指针指向
EOF
,然后在
for
循环中执行以下操作:

    for(i = 0; i < nmemb; i++) {
        fscanf(outtput, "%s %s %s", records[i].f_name, records[i].s_name, records[i].ID);
        .....
        .....
上述程序中的文件读取内容:

Hello Vilho..
How are you!
输出:

Number of lines in file: 2
ch : -1
Now try to read file using fscanf()
fscanf() return value, ch : -1
Resetting the file pointer to the start of file
Reading file..
HelloVilho..Howareyou!
ch : -1
在这里您可以看到,第一个
ch:-1
指示文件指针位于
EOF
,如果您尝试读取,您将获得
EOF
,因为没有剩余的内容可读取。重置文件指针后,您可以看到
fscanf()
能够读取文件


当(!feof(file))
时,不应使用
。检查。

张贴
主功能的其余部分。请注意。您读取到输出的EOF,然后继续尝试从中读取更多内容,而无需倒带或关闭并重新打开它。如果您测试了
fscanf()
中的返回值,您就会发现这个问题。最好以文本格式存储您的内容,如,并使用与该格式相关的库发布
main
函数的其余部分。请注意。您读取到输出的EOF,然后继续尝试从中读取更多内容,而无需倒带或关闭并重新打开它。如果您测试了来自
fscanf()
的返回值,您就会发现这个问题。最好以文本格式存储您的内容,例如,并使用与该格式相关的库