Функция fscanf
Функция fscanf читает данные из файла и сохраняет их в переменные в соответствии со строкой формата. Первым параметром функция принимает указатель на файловый поток, вторым - строку формата, а далее - адреса переменных, в которые следует записать прочитанные значения. Функция возвращает количество успешно прочитанных и присвоенных элементов или EOF при ошибке чтения.
Строка формата может содержать спецификаторы, такие как "%d" для целых чисел, "%f" для чисел с плавающей точкой, "%s" для строк и другие. Перед переменными обязательно нужно указывать оператор взятия адреса &, кроме случаев, когда переменная уже является указателем или массивом.
Синтаксис
int fscanf(FILE* stream, const char* format, ...);
Пример
Давайте создадим файл test.txt с двумя числами и прочитаем их с помощью функции fscanf:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
FILE* file = fopen("test.txt", "w");
fprintf(file, "12 34");
fclose(file);
file = fopen("test.txt", "r");
int a, b;
int res = fscanf(file, "%d %d", &a, &b);
cout << "Read: " << res << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
fclose(file);
return 0;
}
Результат выполнения кода:
"Read: 2"
"a = 12"
"b = 34"
Пример
Давайте прочитаем из файла строку и число:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
FILE* file = fopen("test.txt", "w");
fprintf(file, "abcde 12345");
fclose(file);
file = fopen("test.txt", "r");
char str[100];
int num;
int res = fscanf(file, "%s %d", str, &num);
cout << "Read: " << res << endl;
cout << "str = " << str << endl;
cout << "num = " << num << endl;
fclose(file);
return 0;
}
Результат выполнения кода:
"Read: 2"
"str = abcde"
"num = 12345"
Пример
Давайте проверим, что вернёт функция fscanf, если файл пуст:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
FILE* file = fopen("test.txt", "w");
fclose(file);
file = fopen("test.txt", "r");
int a;
int res = fscanf(file, "%d", &a);
cout << "res = " << res << endl;
fclose(file);
return 0;
}
Результат выполнения кода:
"res = -1"