由于ScanF没有发生Seg Fault,这是由于我的主要功能出现问题。
我正在尝试读取一些数据文件,当我尝试使用fscanf时,我的程序是seg faulting。这就是我所拥有的:
while(fscanf(fr, "%d%s%d%d", riderArray[numberOfRiders].arrivalTime, riderArray[numberOfRiders].riderNumber, riderArray[numberOfRiders].floorArrival, riderArray[numberOfRiders].floorDestination)!= EOF)
{
numberOfRiders++;
}
预期目标是,每一行(保证格式为int string int int
)被解析为结构,直到读取file fr
中的所有数据。
我认为替代方案只是:
while(fscanf(fr, "%d%s%d%d", &temp1, &tempS, &temp2, &temp3)!= EOF)
{
riderArray[numberOfRiders].riderNumber = temp1;
etc. etc.
numberOfRiders++;
}
使用临时变量来避免必须完全组合fscanf,structs和数组(无论如何,这看起来可能更清晰。
这是结构:
typedef struct rider
{
char riderNumber[5];
int timeWaiting;
int jobLength;
int arrivalTime;
int floorArrival;
int floorDestination;
} rider;
答案 0 :(得分:2)
你必须给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
)
答案 1 :(得分:1)
我注意到你的实际代码中没有使用指针,即使你的临时示例中有指针。
fscanf(fr, "%d%s%d%d", &riderArray[numberOfRiders].arrivalTime, riderArray[numberOfRiders].riderNumber, &riderArray[numberOfRiders].floorArrival, &riderArray[numberOfRiders].floorDestination)
请注意,riderNumber
不使用“address-of”运算符(&
),因为它是一个数组。
答案 2 :(得分:0)
你首先描述的方式肯定是可行的。如果我们有结构的声明和定义,那么调试会更容易一些。我注意到的一件事是riderArray[numberOfRiders].arrivalTime
似乎是一个值;在fscanf
中,您需要将其作为值的地址。