Рубрики

scanf () и fscanf () в C — простой, но мощный

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

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

Ввод: «это значение 21,2»,
Вывод: значение прочитано 21,2

/ * C программа, чтобы продемонстрировать, что мы можем

   игнорировать некоторую строку в scanf () * /

#include <stdio.h>

int main()

{

    int a;

    scanf("This is the value %d", &a);

    printf("Input value read : a = %d", a);

    return 0;

}
// Вход: это значение 100
// Вывод: чтение входного значения: a = 100

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

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

/ * Пример программы на C для демонстрации использования * s * /
#include<stdio.h>

int main()

{

    int a;

    scanf("%*s %d", &a);

    printf("Input value read : a=%d",a);

    return 0;

}

  
// Ввод: «блаблабла 25»
// Вывод: прочитанное значение: 25

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

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

fscanf (): Устали от всего слипчивого синтаксиса для чтения из файлов? хорошо, fscanf приходит на помощь.

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

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

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

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

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

/ * c программа, демонстрирующая fscanf и его использование * /
#include<stdio.h>

int main()

{

    FILE* ptr = fopen("abc.txt","r");

    if (ptr==NULL)

    {

        printf("no such file.");

        return 0;

    }

  

    / * Предполагая, что abc.txt имеет содержимое ниже

       формат

       ИМЯ ВОЗРАСТНЫЙ ГОРОД

       ABC 12 Hyderbad

       до 25 Дели

       около 65 бангалор *

    char* buf[100];

    while (fscanf(ptr,"%*s %*s %s ",buf)==1)

        printf("%s\n", buf);

  

    return 0;

}

Выход:

CITY
hyderbad
delhi
bangalore 

Упражнение: Подсчитайте количество слов, символов и строк в файле с помощью fscanf!

Эта статья предоставлена Нихилом Чакравартулой. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

scanf () и fscanf () в C — простой, но мощный

0.00 (0%) 0 votes