Я, вероятно, не использовал бы fscanf()
для этого:
while ((c = fgetc(fp)) != EOF && isdigit(c))
array[i++] = c - '0';
Если вы должны использовать fscanf()
, то:
int i = 0;
int v;
while (fscanf(fp, "%1d", &v) == 1)
{
assert(v >= 0 && v <= 9);
array[i++] = v;
}
1 в строке формата ограничивает целое число одной цифрой. Вы должны передать int *
, если вы используете %1d
. Если у вас есть поддержка C99 в вашей библиотеке, вы можете использовать:
int i = 0;
while (fscanf(fp, "%1hhd", &array[i++]) == 1)
;
Модификатор длины hh
указывает, что указатель является указателем на символ (очень короткое целое), а не указателем на int
.