2015-11-22 51 views
-2

如果我得到了以下文件從文件中讀取特定字段用C

1 station1 1 
2 station2 2 
3 station3 3 
4 station4 4 
5 station5 5 
6 station6 6 
7 station7 7 
8 station8 8 
9 station9 9 
10 station10 10 

,我想讀的第一和最後一行的數據。我試過這個:

for (i=0; i<n; i++) { 
    ret = fork(); 
    if (ret == 0) { 
       fscanf(fstation,"%d %s %d",id, station, num); 
       printf("Identifier is %d %s %d \n",id,station,num); 


       exit(0); 


     }else{wait(&st);} 



     } 

而輸出是這樣的。

Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 
Identifier is 0 0 

它沒有效果很好,我做錯了什麼? 編輯:抱歉的誤解,我試圖翻譯部分代碼,使其更容易理解。

+2

的fscanf應給予指針ID,車站和num(即&ID&ststion, &NUM)。順便說一句,你爲什麼要分叉? – Harald

+0

與指針相同的結果,我使用fork,因爲我爲每一行使用子進程。 – MarcoGarzini

+2

你能告訴我們新的代碼嗎?順便說一句,輸出與printf不匹配。 – Harald

回答

0

從fscanf掃描到的所有東西都需要解除引用。

fscanf(fstation,"%d %s %d",id, station, num); 

在這種情況下,你有「身份證」和的fscanf正常變量「NUM」,它將把存儲在變量的值作爲其中的地址發送新信息。爲了將新信息存儲在所需的變量中,您需要爲fscanf提供這些變量的地址。這可以通過&符號(&)完成。

fscanf(fstation,"%d %s %d", &id, station, &num); 

字符串,但沒有做這種方式,因爲他們都已經會指向地址(字符數組)。所以在這種情況下,'站'可以不用&符號。