使用fscanf在结构数组中设置结构的属性

使用fscanf在结构数组中设置结构的属性,c,arrays,struct,scanf,C,Arrays,Struct,Scanf,Seg故障不是因为ScanF而发生的,是因为我的主功能有问题。 我试图读入一些数据文件,当我尝试使用fscanf时,我的程序出现seg故障。以下是我所拥有的: while(fscanf(fr, "%d%s%d%d", riderArray[numberOfRiders].arrivalTime, riderArray[numberOfRiders].riderNumber, riderArray[numberOfRiders].floorArrival, riderArray[number

Seg故障不是因为ScanF而发生的,是因为我的主功能有问题。

我试图读入一些数据文件,当我尝试使用fscanf时,我的程序出现seg故障。以下是我所拥有的:

while(fscanf(fr, "%d%s%d%d", riderArray[numberOfRiders].arrivalTime, riderArray[numberOfRiders].riderNumber,    riderArray[numberOfRiders].floorArrival, riderArray[numberOfRiders].floorDestination)!= EOF)
     {
     numberOfRiders++;
     }
预期目标是,将每一行(保证格式为
int-string int
)解析为一个结构,直到读取
文件fr
中的所有数据

这样行吗

我认为另一种选择是:

while(fscanf(fr, "%d%s%d%d", &temp1, &tempS, &temp2, &temp3)!= EOF)
     {
         riderArray[numberOfRiders].riderNumber = temp1;
         etc. etc.
     numberOfRiders++;
     }
使用temp变量可以避免将fscanf、结构和数组完全组合在一起(无论如何,这看起来可能更干净)

下面是结构:

typedef struct rider
{
    char  riderNumber[5];
    int  timeWaiting;
    int  jobLength;
    int  arrivalTime;
    int  floorArrival;
    int  floorDestination;

} rider; 

您必须给fscanf一些提示:

while(
    fscanf(fr, "%d%s%d%d",
        &riderArray[numberOfRiders].arrivalTime,
        riderArray[numberOfRiders].riderNumber,    // this is already a pointer
        &riderArray[numberOfRiders].floorArrival,
        &riderArray[numberOfRiders].floorDestination
    ) != EOF
)

您必须给fscanf一些提示:

while(
    fscanf(fr, "%d%s%d%d",
        &riderArray[numberOfRiders].arrivalTime,
        riderArray[numberOfRiders].riderNumber,    // this is already a pointer
        &riderArray[numberOfRiders].floorArrival,
        &riderArray[numberOfRiders].floorDestination
    ) != EOF
)

我注意到您在实际代码中没有使用指针,即使在temp示例中有指针

fscanf(fr, "%d%s%d%d", &riderArray[numberOfRiders].arrivalTime, riderArray[numberOfRiders].riderNumber, &riderArray[numberOfRiders].floorArrival, &riderArray[numberOfRiders].floorDestination)

请注意,
riderNumber
不使用“address of”操作符(
&
),因为它是一个数组。

我注意到您在实际代码中没有使用指针,即使在temp示例中有指针

fscanf(fr, "%d%s%d%d", &riderArray[numberOfRiders].arrivalTime, riderArray[numberOfRiders].riderNumber, &riderArray[numberOfRiders].floorArrival, &riderArray[numberOfRiders].floorDestination)

请注意,
riderNumber
没有使用“address of”操作符(
&
),因为它是一个数组。

这当然可以按照您首先描述的方式进行。如果我们有了结构的声明和定义,那么调试就会容易一些。我注意到,
riderArray[numberOfRiders].arrivalTime
似乎是一个值;在
fscanf
中,您需要它作为值的地址。

您首先描述的方式当然是可行的。如果我们有了结构的声明和定义,调试就会容易一些。我注意到,
riderArray[numberOfRiders].arrivalTime
似乎是一个值;在
fscanf
中,您需要它作为值的地址。

您可以提供结构的定义吗?@Blag--这是一个很好的观点。完成。第一项应该是
charriderNumber[5]
(假设您不需要指针数组)。您能提供结构的定义吗?@Blag--这是一个很好的观点。完成。第一项应该是
char riderNumber[5]
(假设您不需要指针数组)-1:您不知道结构成员是否定义为指针,括号是unnecessary@BlagovestBuyukliev:是的,但通常当类似fscanf的函数seg出现故障时,参数有问题。至少,我首先检查这些参数。括号是为了可读性,我喜欢:)-1:您不知道结构成员是否定义为指针,括号是unnecessary@BlagovestBuyukliev:是的,但通常当类似fscanf的函数seg出现故障时,参数有问题。至少,这些是我检查的第一件事。括号是为了可读性,我喜欢:)