2014-12-07 143 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行對我來說沒有多大意義。

相關問題