Я хочу сканировать только число с самого начала ( он всегда находится в отдельной строке ).
Это хороший совет, предлагающий строку строковый синтаксический анализ ввода. Вы можете использовать комбинацию fgets
(1) и sscan
(2) , чтобы прочитать это число.
fgets
будет читать до определенное количество символов из потока и сохранить эти символы в буфере. Если он находит новую строку, он прекращает чтение, сохраняет новую строку в буфере, за которым следует нулевой символ конца. В противном случае добавляется только терминатор. В случае сбоя он возвращает NULL-указатель.
sscanf
работает в основном как scanf
или fscanf
, но читает из массива символов, а не из потока.
Также лучше всегда проверять возвращаемое значение этой библиотечной функции.
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 1024
int main(void)
{
char const *file_name = "data.txt";
FILE *in_file = fopen(file_name, "r");
if (!in_file) {
fprintf(stderr, "Error while reading \"%s\": %s", file_name, strerror(errno));
return EXIT_FAILURE;
}
char buffer[BUF_SIZE];
int number = 0;
while( fgets(buffer, BUF_SIZE, in_file) ) {
if ( sscanf(buffer, "%d", &number) == 1 ) {
if ( 0 < number && number < 100 ) {
printf("%d", number);
break;
}
}
}
fclose(in_file);
return EXIT_SUCCESS;
}
Пример .
Некоторые ссылки на функции, использованные в предыдущем фрагменте
1) fgets
: man- pages или cppreference .
2) sscanf
: man-pages или cppreference