2016-10-07 9 views
2

Читаю 15 чисел из текстового файла, с каждым номером в новой строке:C Программа - Проверка номера чтения из текстового файла

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

Как вы можете видеть из кода мне нужны номера для быть проверенными, чтобы они были меньше 26, в противном случае прекратить программу.

На данный момент я проверяю только после вставки его в массив (numArray). Есть ли более чистый способ сделать это (для проверки перед вставкой в ​​массив)?

Проблема в том, что я не могу получить фактическую строку в текстовом файле, который читается. Вот почему я проверил его с помощью индекса цикла в массиве (int x = numArray [i];).

Любая помощь приветствуется, я новичок в программировании на С. Благодарю.

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. Проверьте возвращаемое значение 'fscanf' в случае, если файл имеет другие символы, а не только цифры. 2. Почему вы все равно помещаете числа в массив, является ли необходимым шагом для более позднего кода? В любом случае вы на самом деле не вставляете * ничего, вы просто устанавливаете значения в индексах массива (вставка обычно подразумевает перемещение элементов, чтобы сделать комнату посередине). – hyde

+2

Ваша петля выйдет за пределы массива. Оператор 'sizeof' дает вам размер *** байтов ***, а не количество элементов. Для реального массива (например, ваш 'numArray') вы можете получить количество элементов, разделив размер полного массива на размер одного элемента, т. Е.' Sizeof numArray/sizeof numArray [0] '. –

ответ

1

, конечно же, вы можете сохранить его в локальной переменной и назначить только в том случае, если оно действительное. Но так как вы вызываете exit(0), если он недействителен, он ничего не меняет. Предположим, вы хотите, чтобы вместо этого вы выбрали break.

BTW Ваша петля неверна. вам нужно разделить sizeof(numArray) на размер одного элемента, иначе вы будете слишком много циклов, и вы будете разбивать машину, если в вашем входном файле слишком много чисел (да, я также добавил тест для конца файла)

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