C 如何将文件读入结构数组?
我试图将一个文本文件读入一个结构数组,但当我试图打印该数组时,该结构为空。打印功能工作正常,我认为问题出在getRawData中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
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()
的返回值,您就会发现这个问题。最好以文本格式存储您的内容,例如,并使用与该格式相关的库