使用结构时fscanf出现问题

使用结构时fscanf出现问题,c,struct,scanf,C,Struct,Scanf,我无法使此fscanf()正常工作。它说它在Computer->serialNumber之前缺少一个表达式,但我不知道为什么会这样?我已经试着看了Tutorialspoint,但没有太多帮助。在函数Computer*readComputers(char*filename) 您可以使用指向structcptr的指针来访问struct的成员 像这样写fscanf- Computer* cptr=malloc(sizeof(Computer)*6); 同时检查函数Computer*readCompu

我无法使此
fscanf()
正常工作。它说它在
Computer->serialNumber
之前缺少一个表达式,但我不知道为什么会这样?我已经试着看了Tutorialspoint,但没有太多帮助。

在函数
Computer*readComputers(char*filename)

您可以使用指向struct
cptr
的指针来访问struct的成员

像这样写
fscanf
-

Computer* cptr=malloc(sizeof(Computer)*6);

同时检查函数
Computer*readComputers(char*filename)

您可以使用指向struct
cptr
的指针来访问struct的成员

像这样写
fscanf
-

Computer* cptr=malloc(sizeof(Computer)*6);
同时根据您的代码检查
fscanf

的返回

while(fscanf(fp,"%7s, %d, %d, %d", 
        cptr->serialNumber, &cptr->price, &cptr->GBofRAM, &cptr->GBofHardDrive)==4){
       // do something with these variables
   }         //loop as OP has mentioned in comment
是一个无效的语句<代码>计算机这是一种(用户定义的)数据类型。你不能尊重这一点。您需要使用
cptr
作为您定义的变量名

另外,在使用返回的指针之前,请始终检查
malloc()
是否成功。否则,如果
malloc()
失败,您将通过访问无效指针调用未定义的行为。

根据您的代码

while(fscanf(fp,"%7s, %d, %d, %d", 
        cptr->serialNumber, &cptr->price, &cptr->GBofRAM, &cptr->GBofHardDrive)==4){
       // do something with these variables
   }         //loop as OP has mentioned in comment
是一个无效的语句<代码>计算机这是一种(用户定义的)数据类型。你不能尊重这一点。您需要使用
cptr
作为您定义的变量名


另外,在使用返回的指针之前,请始终检查
malloc()
是否成功。否则,如果
malloc()
失败,您将通过访问无效指针调用未定义的行为。

表示缺少表达式的“it”是什么?这是编译器错误吗?如果是这样,确切的错误是什么?另外,不要发布不完整的代码。提到错误并尝试发布一条消息,因为代码为结构的6个实例分配了足够的内存,但只读取一个条目。所以这行代码是:
fscanf(fp,“%s,%d,%d”,Computer->serialNumber,&Computer->price,&Computer->GBofRAM,&Computer->GBofHardDrive)应该是:
如果(4!=fscanf(fp,%7s,%d,%d),cptr[0]。serialNumber,&cptr[0]。price,&cptr[0]。GBofRAM,&cptr[0]。GBofHardDrive)){//handle error}
注意“7”,这样serialNumber数组就不会溢出`什么是“it”表示它缺少一个表达式?这是编译器错误吗?如果是这样,确切的错误是什么?另外,不要发布不完整的代码。提到错误并尝试发布一条消息,因为代码为结构的6个实例分配了足够的内存,但只读取一个条目。所以这行代码是:
fscanf(fp,“%s,%d,%d”,Computer->serialNumber,&Computer->price,&Computer->GBofRAM,&Computer->GBofHardDrive)应该是:
如果(4!=fscanf(fp,%7s,%d,%d),cptr[0]。serialNumber,&cptr[0]。price,&cptr[0]。GBofRAM,&cptr[0]。GBofHardDrive)){//handle error}
注意“7”,这样serialNumber数组就不会溢出`按照建议的方式打印垃圾,如:10005325442359296� 83886080 21 205031368�ދ�v�X� 100100当它应该打印出6台不同的计算机时。知道为什么吗?@Geoff数据是如何存储在您的文件中的?只是一个简单的.txt文件。看起来像是100054041000其中有6个。400之后是一个newline@Geoff然后你需要一个循环。你应该提一下。我用循环更新了答案。请检查一下。那么,一段时间(!feof)fp就行了吗?即使如此,它也应该正确读取第一组,对吗?它只得到了10005的正确答案。所以按照建议的方式打印垃圾,比如:10005325442359296� 83886080 21 205031368�ދ�v�X� 100100当它应该打印出6台不同的计算机时。知道为什么吗?@Geoff数据是如何存储在您的文件中的?只是一个简单的.txt文件。看起来像是100054041000其中有6个。400之后是一个newline@Geoff然后你需要一个循环。你应该提一下。我用循环更新了答案。请检查一下。那么,一段时间(!feof)fp就行了吗?即使如此,它也应该正确读取第一组,对吗?它只对了10005。