2012-10-26 57 views
1

我幾乎已經將整個代碼弄清楚了,問題在於文件有名稱,有些名稱包含中間名,有些則不包含名稱。在文件中,每個名稱都是在一個新行如何使用fscanf和數組讀取帶有姓氏和名字的文件

林肯,亞伯拉罕
奧巴馬,巴拉克侯賽因
李四,約翰

現在我的這個問題是我原來有兩個數組在的fscanf每個名字讀但它將Hussien視爲一條新線?因此,我嘗試爲中間名做三個數組,但是當它在文件中讀取時,它將輸出顯示爲。

林肯,亞伯拉罕奧巴馬
巴拉克侯賽因伊
約翰

while (fscanf(input,"%s %s", &last[i],&first[i]) != EOF) 
{ i++; } 

我究竟做錯了什麼?我想掃描整行內容,但在程序的另一部分,我必須將姓和名分隔開,因爲「user ID」將會被創建。 a_lincoln等

+1

不需要&符號 – squiguy

+0

我們不知道Richard是否需要&符號,因爲Richard沒有向我們展示last和first的定義。 –

回答

0

爲的fscanf或scanf或sscanf的要這樣做

char *last[30]; 
char *first[30]; 
    while (fscanf(input,"%s %s", last[i],first[i]) != EOF) 
0

格式字符串,空白的每個實例導致函數來讀取並丟棄在該地點出現在輸入任何空白,包括換行符。所以fscanf不會逐行閱讀。

您需要調用另一個函數來將一行讀入字符串。然後調用sscanf來讀取字符串,首先是逗號,然後是逗號後的部分。

+0

這將是一個例子嗎?我不知道如何使用sscanf – Richard

2

使用"%[^,], %[^\r\n]"作爲fscanf中的格式字符串。它忽略姓氏的冒號,並讀取同一行中剩餘的字符作爲名字。

+1

+1,但我認爲你的意思是'逗號',而不是冒號。 – WhozCraig

+0

工作得很好,除了當我做fprintf時只有第一行遵循格式化規範,然後每一行繼續添加一個新行fprintf(oput,「%d \ t \ t%s,\ t%s \ t%s_% .1秒」,I,最後[I]中,首先[I],最後[I]中,首先[I]); – Richard

+0

@Richard在格式字符串的末尾添加一個額外的'\ n'。 – lqs

0

閱讀使用 while (fscanf(input,"%[^\n]s", line) != EOF)

「行可能是字符數組或字符指針」從文件中的行

現在你必須從文件

  • 每一行利用完整產品線strtok()函數分離令牌
  • 使用令牌計數,您將會知道是否存在midle名稱。