C - Чтение до EOF, получение дополнительных адресов и номеров (массив) - PullRequest
0 голосов
/ 01 декабря 2018

Итак, у меня есть файл, полный цифр:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Дело в том, что я не знаю точное число чисел в этом файле, поэтому я не знаю точный размермассив Мне нужно будет записать информацию этого файла в этот массив.

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

Вот код:

#include <stdio.h>
#include <stdlib.h>

#define ARR_SIZE 30

int main(void){
FILE *fp;
int array[ARR_SIZE];
fp = fopen("C:/project/project.txt", "r");

printf("Numbers: ");

for(int i = 0; i < ARR_SIZE; i++){
    fscanf(fp, "%d", &array[i]);
}
for(int j = 0; j < ARR_SIZE; j++){
    printf("\n%d", array[j]);
}

fclose(fp);
return 0;
}

Я просто пытаюсь делать стандартные вещи, открывая файл, читая файл с помощью цикла for, записывая всю эту информацию в массив и выводя массив.

Вот вывод, который я получаю, я понимаю, что это из-за размера, но можете ли вы сказать мне, как ограничить все это?Самый простой способ?

Вывод:

Numbers:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4199136
0
4200896
6422240
6422296
6422476
1998244384
592257989
-2
1998220218
1998220461
4200896
6422368
4200987
4200896

У меня есть размер массива 30 и числа в файле 15, первые 15 в порядке, это именно то, что мне нужно, но мне не нужноэти цифры после него ...

1 Ответ

0 голосов
/ 01 декабря 2018

Вам нужно условие остановки для цикла, который читает из файла.Один из вариантов - остановить, когда вы не можете отсканировать объект.Используйте возвращаемое значение из fscanf, чтобы обнаружить это.

Когда вы выполняете печать, распечатываете только количество элементов, фактически отсканированных.

Попробуйте

for(int i = 0; i < ARR_SIZE; i++){
    if (fscanf(fp, "%d", &array[i]) != 1) break; // Stop if the scan fails
}
for(int j = 0; j < i; j++){  // ARR_SIZE replaced by i
    printf("\n%d", array[j]);  
}

Кстати: вы должны проверить, что fp действительно только после открытия файла.

...