2016-03-23 5 views
-1

ich eine Textdatei wie folgt formatiert haben:Lesen eines int aus einer Textdatei in ein Array in 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 

Ich brauche diese Zahlen in den Arrays pID setzen [] Ankunft [], Bursts [] bzw. Priorität []. C ist nicht meine stärkste Sprache, also habe ich einige Probleme damit.

Hier ist mein aktueller Code:

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); 
} 

Vielen Dank für jede Hilfe!

+0

[warum-ist-while-feof-Datei-immer-falsch] (http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong). Und "Ich habe einige Probleme dabei" ist nicht wirklich * spezifisch *. Siehe [fragen]. – Olaf

+0

'fscanf' gibt * die Anzahl der erfolgreich gescannten Objekte * und nicht den gescannten Wert zurück. 'if (fscanf (Datei,"% d ", & pID [i])! = 1) exit (1);' –

+0

Entschuldigung, die Werte, die in die Arrays geschrieben werden, sind nicht in der Nähe der Datei. Danke für den Artikel. Wenn! Feof (Datei) falsch ist, wie kann man die einzelnen Zeilen der Datei korrekt durchlaufen? –

Antwort

1

Sie verwenden feof und fscanf falsch. Ich schlage vor, Sie lesen jeweils eine Zeile aus der Datei, überprüfen, ob sie gelesen wurde, und dann scannen Sie die Werte aus dem Puffer, überprüfen, ob der Array-Index noch in Ordnung ist, und die richtige Anzahl von Feldern wurde gescannt.

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

Vielen Dank! Das hat mein Problem gelöst, alles wird gelesen wie es sein sollte. –

+0

Also prüft die sscanf-Zeile, ob es in jeder Zeile der Datei vier Werte gibt, während die entsprechenden Werte in die Arrays eingefügt werden. Entschuldigung, ich stelle immer wieder so viele Fragen, ich versuche nur zu verstehen, wie das mein Problem gelöst hat. –

+0

Ja, das ist richtig. Es ist immer eine gute Idee, alles zu überprüfen, was Sie überprüfen können: Nehmen Sie nichts für robusten Code an, besonders wenn die Eingabequelle nicht in Ihrer Kontrolle ist. Hinweis: Dies würde einfach alle anderen Daten in dieser Textzeile ignorieren, wenn es mehr als 4 Zahlen gäbe, aber * würde * alles abfangen, das keine Nummer ist. –

Verwandte Themen