c - 通过函数+结构体读取文件

标签 c structure

我有一个结构、一个我想读取的 txt 文件以及以下运行良好的代码。 我正在尝试创建一个函数来包含大多数读取文件函数,但似乎局部变量等存在问题。

#include <stdio.h>
#include <string.h>

int i,j,numberofseats,temp;
char platenr[8],selection,buff[60];
char firstname[20];
char lastname[20];
char phone[11];
char *p;
typedef struct
    {
    char fullname[40];
    unsigned short phonenr[10];
    unsigned int seatnr;
    }PASSENGERS;
int main(void)
{


FILE *businfo;                                          
businfo = fopen ("bus.txt","r");                        
if (businfo == NULL)                                                                        
{
    printf("Error Opening File, check if file bus.txt is present");
    exit(1);
}
fscanf(businfo,"%s %d",platenr, &numberofseats);
printf("Bus Licence plate Nr is: %s and number of seats is: %d", platenr, numberofseats);
PASSENGERS passenger[numberofseats];
for (j=0;j<numberofseats;j++)
    {passenger[j].seatnr=j+1;
    strcpy(passenger[j].fullname,"\0");
    }

while (fgets(buff,sizeof(buff),businfo))    
{sscanf(buff, "%s %s %d %s", firstname, lastname, &temp,phone);
strcpy(passenger[temp-1].fullname,firstname);
    strcat (passenger[temp-1].fullname, " ");
    strcat(passenger[temp-1].fullname,lastname);
    i=0;
    for (p=phone;*p!='\0';p++)       
        {
        (passenger[temp-1].phonenr[i])=*p -'0';  
        i++;
        }
}

因此,在代码运行之后,这就是我创建的函数,

应定义目标的位置,以更新结构

但是 *target 尚不清楚,因为它位于函数将读取的 txt 文件(临时变量)内。

这让我发疯!

void readfile( PASSENGERS *target, FILE *businfo){
while (fgets(buff,sizeof(buff),businfo))    
{sscanf(buff, "%s %s %d %s", firstname, lastname, &temp,phone);
strcpy(target->fullname,firstname);
    strcat (target->fullname, " ");
    strcat(target->fullname,lastname);
    i=0;
    for (p=phone;*p!='\0';p++)         
        {
        (target->phonenr[i])=*p -'0';  
        i++;
        }
}}

最佳答案

看看你创建的readfile函数和main函数中的纯代码之间的区别。问题是您通过在主函数中索引每个元素 (passenger[temp-1]) 来正确填充数组乘客,但每次执行 while 循环时 readfile 函数仅填充数组的第一个元素。

有两种解决方案:

第一个解决方案:函数执行后,指针 target 指向同一个元素(第一个元素)(使用 (target+temp-1)-> 填充每个元素)

void readfile( PASSENGERS *target, FILE *businfo)
{
    while (fgets(buff,sizeof(buff),businfo))    
    {
        sscanf(buff, "%s %s %d %s", firstname, lastname, &temp,phone);
        strcpy((target+temp-1)->fullname,firstname);
        strcat ((target+temp-1)->fullname, " ");
        strcat((target+temp-1)->fullname,lastname);
        i=0;
        for (p=phone;*p!='\0';p++)         
        {
           ((target+temp-1)->phonenr[i])=*p -'0';  
           i++;
        }
     }
}

第二种解决方案:函数执行后,指针目标指向数组中最后一个非空元素(在 while 循环末尾增加指针)

void readfile( PASSENGERS *target, FILE *businfo)
{
    while (fgets(buff,sizeof(buff),businfo))    
    {
        sscanf(buff, "%s %s %d %s", firstname, lastname, &temp,phone);
        strcpy(target->fullname,firstname);
        strcat (target->fullname, " ");
        strcat(target->fullname,lastname);
        i=0;
        for (p=phone;*p!='\0';p++)         
        {
           (target->phonenr[i])=*p -'0';  
           i++;
        }

        target = target + temp - 1;

     }
}

关于c - 通过函数+结构体读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202543/

相关文章:

ios - 在转换应用程序中构建数据

c - 为什么另一个结构中的一个结构被更新,而另一个结构却没有更新?

c - memmove 只移动一半的数字

c - 随机 int 1-255 到 C 中的字符

c++ - gcov 不生成覆盖文件

c - 使用 C 中的宏提取内容

c++ - 从指针读取 cubin 结构

c - 结构如何影响效率?

c - 为什么运行程序会出错?

javascript - 结构与 Javascript 代码? CSS、Divs,然后是脚本?