scanf() и fscanf() в C

Опубликовано: 15 Сентября, 2022

В языке C функция scanf() используется для чтения форматированного ввода со стандартного ввода. Он возвращает все количество записанных в нем символов, в противном случае возвращает отрицательное значение.

Синтаксис:

int scanf(const char *characters_set)

Многие из нас знают традиционное использование scanf. Ну, и вот некоторые из менее известных фактов

Как прочитать только ту часть ввода, которая нам нужна?
Например, рассмотрим некоторый входной поток, который содержит только символы, за которыми следует целое число или число с плавающей запятой. И нам нужно сканировать только это целое число или число с плавающей запятой.

Пример:

Input: "this is the value 100", 
Output: value read is 100
Input : "this is the value 21.2", 
Output : value read is 21.2 

Теперь предположим, что мы не знаем, что такое предшествующие символы, но мы точно знаем, что последнее значение является целым числом. Как мы можем просмотреть последнее значение как целое число?

Приведенное ниже решение работает, только если во входной строке нет пробелов. Например,

Вход

"blablabla 25"

Выход

Input Value read : 25

Объяснение : %*s в scanf используется для игнорирования некоторого ввода по мере необходимости. В этом случае он игнорирует ввод до следующего пробела или новой строки. Точно так же, если вы напишете %*d, он будет игнорировать целые числа до следующего пробела или новой строки.

Общее использование scanf():

Вход

2

Выход

a = 2

Вышеприведенный факт на первый взгляд может показаться не очень полезным трюком. Чтобы понять его использование, давайте сначала посмотрим на fscanf().

Функция fscanf в C

Устали от неуклюжего синтаксиса для чтения из файлов? хорошо, fscanf приходит на помощь. Эта функция используется для чтения форматированного ввода из заданного потока на языке C.

Синтаксис:

int fscanf(FILE *ptr, const char *format, ...) 

fscanf читает из файла, на который указывает указатель FILE (ptr), вместо чтения из входного потока.

Возвращаемое значение: возвращает ноль в случае неудачи. В противном случае он возвращает входную строку в случае успеха.

Пример 1. Рассмотрим следующий текстовый файл abc.txt.

NAME    AGE   CITY
abc     12    hyderbad
bef     25    delhi
cce     65    bangalore  

Теперь мы хотим прочитать только поле города из приведенного выше текстового файла, игнорируя все остальные поля. Комбинация fscanf и упомянутого выше трюка делает это с легкостью.

Выход

CITY
hyderabad
delhi
bangalore 

Пример 2. Рассмотрим следующий двоичный файл program.bin.

n1    n2    n3
1    5    6
2    10    11
3    15    16
4    20    21

Чтобы прочитать все значения n1, n2 и n3 из корзины, мы используем fscanf().

Выход

n1: 1   n2: 5   n3: 6
n1: 2   n2: 10  n3: 11
n1: 3   n2: 15  n3: 16
n1: 4   n2: 20  n3: 21

Посмотрим отличия в табличной форме -:

сканф() фсканф()
1. Он используется для чтения стандартного ввода. Эта функция используется для чтения ввода из файла
2.

Его синтаксис -:

scanf(const char *format, …)

Его синтаксис -:

fscanf(ФАЙЛ *поток, const char *format, …)

3. Требуется, чтобы спецификаторы формата принимали ввод определенного типа. Он читает поток в виде байта
4.

Он принимает три параметра:

Пробельный символ, Непробельный символ, Спецификаторы формата

Он определен в заголовочном файле #include <stdio.h>

Эта статья предоставлена Нихилом Чакравартулой . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью на write.geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

C