2016-10-07 4 views
2

I 15 Zahlen aus einer Textdatei lese, mit jeder Zahl in einer neuen Zeile:C-Programm - Nummern Validieren aus einer Textdatei lesen

 
1 
2 
3 
4 
5 
10 
12 
13 
14 
15 
21 
22 
23 
24 
26 

Wie Sie aus dem Code sehen können ich brauchen, um die Zahlen zu validiert werden, so dass sie weniger als 26 sind, andernfalls das Programm beenden.

Zur Zeit werde ich nur nach dem Einfügen in das Array (numArray) validieren. Gibt es eine sauberere Art, es zu tun (vor dem Einfügen in das Array zu validieren)?

Das Problem ist, ich kann nicht scheinen, die tatsächliche Zeile in der Textdatei, die gerade gelesen wird. Deshalb habe ich es mit dem Loop-Index auf dem Array (int x = numArray [i];) validiert.

Jede Hilfe ist willkommen, ich bin ziemlich neu in der C-Programmierung. Vielen Dank.

FILE *myFile = fopen(dataset.txt, "r"); 
int numArray[15]; 

if (myFile != NULL) { 

    for (int i = 0; i < sizeof(numArray); i++) 
    { 
     //insert int to array 
     fscanf(myFile, "%d", &numArray[i]); 

     //Validate number 
     int x = numArray[i]; 
     if (x > 25) { 
      printf("Invalid number found, closing application..."); 
      exit(0); 
     } 
    } 

    //close file 
    fclose(myFile); 
} 
else { 
    //Error opening file 
    printf("File cannot be opened!"); 
} 
+0

1. Überprüfen Sie den Rückgabewert von 'fscanf', falls die Datei andere Zeichen als nur Zahlen enthält. 2. Warum legst du die Zahlen trotzdem in das Array, ist das ein notwendiger Schritt für späteren Code? Wie auch immer, du fügst nicht wirklich etwas ein, sondern stellst nur Werte für Array-Indizes ein (das Einfügen würde im Allgemeinen dazu führen, dass Elemente verschoben werden, um in der Mitte Platz zu schaffen). – hyde

+2

Ihre Schleife wird außerhalb der Grenzen des Arrays gehen. Der Operator 'sizeof' gibt Ihnen die Größe in *** Bytes ***, nicht die Anzahl der Elemente. Für ein tatsächliches Array (wie Ihr 'numArray') können Sie die Anzahl der Elemente ermitteln, indem Sie die Größe des gesamten Arrays durch die Größe eines einzelnen Elements dividieren, z. B.' sizeof numArray/sizeof numArray [0] '. –

Antwort

1

natürlich können Sie es in einer lokalen Variablen speichern und nur zuweisen, wenn gültig. Aber da Sie exit(0) aufrufen, wenn ungültig, ändert es nichts. Ich nehme an, Sie möchten break von der Schleife stattdessen.

BTW Ihre Schleife ist falsch. Sie müssen sizeof(numArray) durch die Größe eines Elements teilen, sonst werden Sie zu viele Schleifen durchlaufen und Sie werden den Rechner abstürzen, wenn zu viele Zahlen in Ihrer Eingabedatei sind (ja, ich habe auch einen Test für das Dateiende hinzugefügt)

if (myFile != NULL) { 

    for (int i = 0; i < sizeof(numArray)/sizeof(numArray[0]); i++) 
    { 
     int x; 
     //insert int to array 
     if (fscanf(myFile, "%d", &x)==0) 
     { 
      printf("Invalid number found/end of file, closing application...\n"); 
      exit(0); // end of file/not a number: stop 
     } 

     //Validate number 
     if (x > 25) { 
      printf("Invalid number found, closing application...\n"); 
      exit(0); 
     } 
     numArray[i] = x; 
    } 

    //close file 
    fclose(myFile); 
}