2014-12-07 96 views
0

所以我的一个朋友发给我这个,但不幸的是我的C技能有点生疏,所以我可能会错过一些简单的东西。第二个fscanf命令中存在该问题。fscanf命令令牌之前的预期主表达式

错误是[Error] expected primary-expression before '[' token。这可能是一些容易遗漏的东西,但我在发布之前尝试了一下。任何帮助表示赞赏!

struct materials 
{ 
    char name,product; 
    int code,code1,number_of_parts,quantity1,number_of_parts1,quantity2;  
}; 
typedef struct materials mater; 
int main() 
{ 
int result(int x) ; 
int number1,j,i,result1,number2,k,z; 
FILE *fp; 
    materials* listOfMaterials; 
fp = fopen("datain.txt", "r"); 

if (fp!=NULL) 
{ 
fscanf(fp, "%d\n",&number1); 

listOfMaterials = (mater*)malloc(number1 * sizeof(mater)); 

for(j=1; j<number1; j++) { 
    fscanf (fp, "%d %d %d %s\n", &mater[j].code, &mater[j].quantity1, &mater[j].number_of_parts, mater[j].name); 
     if (mater[j].quantity1 != 0) 
    { 
      mater[j].code1=(int *)malloc(sizeof(int)*mater[j].quantity1); 
      mater[j].number_of_parts1=(int *)malloc(sizeof(int) * mater[j].quantity1);      
     fscanf (fp,"%d %d\n",&mater[j].code1,&mater[j].number_of_parts1);  
    } 
} 
+1

请整理代码的缩进 - 使其可读。 – 2014-12-07 09:19:14

+0

[如何使用scanf \ fscanf读取一行并解析为变量?](http://stackoverflow.com/questions/5204625/how-to-use-scanf-fscanf-to-read-a-线和解析到变量) – jww 2014-12-07 09:23:11

+0

对不起,我刚刚在这里注册。我能做些什么来使其更具可读性? – ahcomm 2014-12-07 09:25:28

回答

2

typedef struct materials mater定义了一个新命名mater

而且在你的代码尝试使用它作为一个变量,所以我想你的意思是定义一个变量,而不是类型:

struct materials mater; 

或者只是:

materials mater; 
+0

我有几个月没碰过C. Mater是我的结构变量,但我不明白的是如果我可以将它看作一个字符串,所以我可以执行'&mater [j] .x'。 – ahcomm 2014-12-07 09:55:10

+0

@ahcomm不,'name'和'product' sturct成员是单个'char's,而不是字符串。如果你想让它们成为字符串,将它们定义为'char * name,* product;',然后*用'malloc(n)'分配它们中的每一个,这样它们将有足够的空间存储'n'字符空终止符)。或者只是使用C++,并避免所有这些混乱:)。 – 2014-12-07 10:42:10

+0

我明白了。正如我所说的,我的一位朋友要求我帮助他,我不想向他提供虚假信息。谢谢。 – ahcomm 2014-12-07 11:02:08

1

mater是一个类型而不是一个对象,你的scanf行对我来说没有多大意义。

相关问题