typedef struct computer
{
char serialNumber[8];
int price;
int GBofRAM;
int GBofHardDrive;
}Computer;
Computer* readComputers(char* filename);
int main(int argc, char** argv) {
if(argc!=2){
printf("Invalid number of arguments");
return 1;
}
Computer* x=readComputers(argv[1]);
printComputers(x);
free(x);
return (EXIT_SUCCESS);
}
Computer* readComputers(char* filename)
{
Computer* cptr=malloc(sizeof(Computer)*6);
FILE* fp=fopen(filename, "r");
if(fp==NULL){
printf("Failed to open file %s", filename);
return;
}
//fread(cptr, sizeof(Computer), 6, fp);
fscanf(fp,"%s, %d, %d, %d", Computer->serialNumber, &Computer->price, &Computer->GBofRAM, &Computer->GBofHardDrive);
fclose(fp);
return cptr;
我遇到问题让fscanf()
正常工作。它说它在Computer->serialNumber
之前缺少一个表达式,但我不确定为什么会这样呢?我试过看Tutorialspoint,但这并没有太多的帮助。
答案 0 :(得分:4)
根据您的代码,
Computer->serialNumber
是无效的陈述。 Computer
这里是(用户定义的)数据类型。你不能贬低那个。您需要使用cptr
作为已定义的变量名称。
此外,在使用返回的指针之前,请始终检查malloc()
是否成功。否则,如果malloc()
失败,您将通过访问无效指针来调用未定义的行为。
答案 1 :(得分:2)
在函数Computer* readComputers(char* filename)
Computer* cptr=malloc(sizeof(Computer)*6);
你有指向struct cptr
的指针,用它来访问struct的成员。
像这样写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
同时检查fscanf
的返回。