使用fscanf在结构数组中设置结构的属性
Seg故障不是因为ScanF而发生的,是因为我的主功能有问题。 我试图读入一些数据文件,当我尝试使用fscanf时,我的程序出现seg故障。以下是我所拥有的:使用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
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出现故障时,参数有问题。至少,这些是我检查的第一件事。括号是为了可读性,我喜欢:)