2013-01-15 162 views
2

我有一個字符變量,其中包含代表examID的數字(它是char,因爲它必須是char)。我的文本文件看起來像這樣:從文本文件中讀取C

5 1 Exam 1 (audit 31.10.) 
6 1 Exam 2 (audit 23.10.) 
14 1 Lab 01 (audit 21.11.) 
16 1 Lab 02 (audit 28.11.) 
... 

每行第一個號碼是examID,第二個是針對考試點的最大次數,在一行文字下場休息是考試名稱。我需要搜索文本進行examID匹配,如果匹配,我需要存儲最大數量的點,並在變量中檢查名稱以備後用。這是我到目前爲止有:

char examName[100]; 
char tmp[100]; 
int examID; 
int maxPoint=0; 

FILE *fin=fopen("Exams.txt", "r"); 

while(fgets(tmp, sizeof(char)*100, fin)!=NULL) { 
    sscanf(tmp, "%d", &examID); 
    if(examID==s.examNum) 
     printf("%d", examID); 
} 

所以,我發現比賽並打印它,和它的好,但我不知道如何行和考試的名讀取第二個數字。

回答

3

你幾乎有:

sscanf(tmp, "%d %d %[^\n]", &examID, &maxPoint, examName); 
if(examID==s.examNum) 
    printf("%d %d %s\n", examID, maxPoint, examName); 

fgets讀取完整的像,然後sscanf分析它的格式字符串顯示。所以,如果你需要一個號碼,然後編號,然後字符串(如在這種情況下),你可以使用"%d %d %[^\n]"

注意:由於examName有空間(並且是換行符之前的文本文件列表中的部分),我們使用否定掃描集告訴sscanf「我想要的一切,直到一個換行符被發現存儲爲一個字符串」


側面說明,初始化vairables:

char examName[100] = {'\0'}; 
char tmp[100] = {'\0'}; 
int examID = 0; 
+0

另外一張小紙條,有沒有'&'提供因爲標識符是al,所以在'sscanf'中考試名稱準備好一個指針,它指向數組的第一個元素。 – AlienHoboken

+0

感謝您的提示,但它只是不起作用。輸出如下所示:5 0然後是一些奇怪的字符。 5是正確的數字,0是錯誤的(在所有的例子中,我得到0而不是正確的數字)和字符串是完全離開這個世界 – yahzee

+0

@yahzee - 這很奇怪,首先檢查我的旁邊注意上面,並試試看,聽起來像未初始化數據。如果仍然給出奇怪的結果,可以使用更全面的代碼示例進行更新。鑑於你給這個文本文件的上面的代碼,我看到這個工作正常。 – Mike