2016-03-23 16 views
-1

數組我有此格式的文本文件:閱讀從文本文件的int到用C

100 0 10 1 
101 6 10 1 
102 8 4 1 
103 12 20 1 
104 19 15 1 
105 30 5 1 
106 35 10 1 

我需要把這些號碼入陣列具有PID [],抵達[],突發[]和優先級[]。 C不是我最強的語言,所以我在做這件事時遇到了一些麻煩。

這裏是我當前的代碼:

void readFile(int n, int pID[], int arrival[], int bursts[], int priority[]){ 
FILE *file; 
int i = 0; 
file = fopen("Process.txt", "r"); 

//File format is pID, arrival, bursts, and priority 
if (file){ 
    while (!feof(file)){ 
     pID[i] = fscanf(file, "%d ", &i); 
     arrival[i] = fscanf(file, "%d ", &i); 
     bursts[i] = fscanf(file, "%d ", &i); 
     priority[i] = fscanf(file, "%d ", &i); 
    } 
    fclose(file); 
} 

感謝您的幫助!

+0

[爲什麼 - 雖然feof文件總是錯](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong)。而且「我在做這件事上遇到了一些麻煩」並不是真的**具體*。見[問]。 – Olaf

+0

'fscanf'返回*成功掃描的項目數*,而不是掃描值。 'if(fscanf(file,「%d」,&pID [i])!= 1)exit(1);' –

+0

抱歉,放入數組的值不在文件附近。感謝這篇文章。如果!feof(文件)不正確,那麼循環遍歷文件的每一行的正確方法是什麼? –

回答

1

您以錯誤的方式使用feoffscanf。我建議你一次從文件中讀取一行,檢查它是否被讀取,然後從緩衝區中掃描值,並檢查數組索引是否仍然正常,並掃描正確數量的字段。

void readFile(int n, int pID[], int arrival[], int bursts[], int priority[]) { 
    FILE *file; 
    int i = 0; 
    char buffer[100]; 
    file = fopen("Process.txt", "r"); 
    if (file){ 
     while (i < n && fgets(buffer, sizeof buffer, file) != NULL) { 
      if(sscanf(buffer, "%d%d%d%d", &pID[i], &arrival[i], &bursts[i], &priority[i]) != 4) { 
       exit(1);    // or recovery strategy 
      } 
      i++; 
     } 
     fclose(file); 
    } 
} 
+0

非常感謝!這解決了我的問題,所有事情都應該被讀懂。 –

+0

所以sscanf行正在檢查以確保文件的每一行中有四個值,同時也將相應的值放入數組中?對不起,我一直在問這麼多問題,我只是想完全理解這是如何解決我的問題。 –

+0

是的,這是正確的。檢查任何你可以檢查的東西總是一個好主意:對於健壯的代碼,不要做任何事情,特別是當輸入源可能不在你的控制範圍內時。雖然注意:如果有超過4個數字,它將簡單地忽略該文本行中的任何其他數據,但它會*捕獲任何不是數字的東西。 –