Поскольку коды разделителей блоков могут появляться в любом месте файла, вам необходимо прочитать и обработать весь файл. Предполагая, что программа не делает ничего абсурдного, стоимость задействованного ввода-вывода будет доминировать над общей стоимостью всей программы.
Я, конечно, могу повторить с l для 1013 * и посчитать эти значения, но я предполагаю, что это не лучший подход.
Почему это не лучший подход? Конечно, детали важны, но вы должны сравнить каждый 4-байтовый фрагмент, интерпретируемый как представление int32_t
, со значением 999999999. Это по своей сути итеративный процесс, и его можно хорошо представить через for
, while
или do
l oop. Я бы написал это примерно так:
#define BUFFER_SIZE 1024
#define BLOCK_HEADER 999999999
FILE *input = fopen(the_file_name);
int32_t numbers[BUFFER_SIZE];
size_t num_blocks = 0;
size_t count;
for (count = fread(numbers, 4, BUFFER_SIZE, input);
count > 0;
count = fread(numbers, 4, BUFFER_SIZE, input)) {
for (size_t i = 0; i < count; i++) {
if (numbers[i] == BLOCK_HEADER) num_blocks++;
}
}