Поиск по сайту:

fgets() и gets() в программировании на C


Введение

Мы все знакомы с функцией scanf(). Это основная функция, применимая для ввода основных пользовательских данных. Несмотря на то, что scanf() отлично работает при вводе таких данных, как целое число, символ, число с плавающей запятой и т. д., он, безусловно, отстает при вводе строк, содержащих пробелы. Давайте рассмотрим пример,

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the string: ");
    scanf("%s", string);
    printf("\n %s",string);
    return 0;
}

Выход:

Как мы можем наблюдать из приведенного выше примера. scanf() останавливает сканирование, как только обнаруживает пробел или новую строку. На самом деле это делает получение строковых входных данных с помощью scanf() немного проблематичным. Этого можно легко избежать, используя некоторые другие функции ввода, такие как gets() и fgets().

В этой статье мы узнаем, как применять обе функции и сравнивать их друг с другом.

получает() функция в C

gets() — это предопределенная функция в C, которая используется для чтения строки или текстовой строки. И сохраните ввод в четко определенной строковой переменной. Функция завершает сеанс чтения, как только встречает символ новой строки.

Синтаксис:

получает (имя переменной);

Приведенный ниже код иллюстрирует использование функции gets(),

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the String: ");
    gets(string);
    printf("\n%s",string);
    return 0;
}

Выход:

Сравните вывод с выводом при использовании scanf(). «Hello World» теперь обрабатывается как одна строка.

функция fgets() в C

Стандартная библиотека C также предоставляет нам еще одну функцию, функцию fgets(). Функция читает текстовую строку или строку из указанного файла или консоли. А затем сохраняет его в соответствующей строковой переменной.

Подобно функции gets(), fgets также прекращает чтение всякий раз, когда встречает символ новой строки. Но, кроме того, в отличие от gets(), функция также останавливается при достижении EOF или даже если длина строки превышает указанный предел, n-1.

Синтаксис,

fgets(char *str, int n, FILE *stream)

  • str — это переменная, в которой будет храниться строка.
  • n — это максимальная длина строки, которая должна быть прочитана.
  • поток — это дескриптор файла, из которого должна быть прочитана строка.

К счастью, мы можем читать текстовые строки как из файла, так и из стандартного потока ввода, используя функцию fgets(). Давайте посмотрим, как

1. Чтение из заданного файла с помощью fgets()

Например,

#include<stdio.h>
int main()
{
    char string[20];
    FILE *fp;
    fp=fopen("file.txt","r");
    fgets(string,20,fp);
    printf("The string is: %s",string);
    fclose(fp);
    return 0;
}
    

Учтите, что file.txt содержит строку «JournalDev fgets() example!». В этом случае вывод приведенного выше кода будет таким:

2. Чтение со стандартного ввода с помощью fgets()

#include<stdio.h>
int main()
{
    char string[20];
    printf("Enter the string: ");
    fgets(string,20,stdin);         #input from stdin stream
    printf("\nThe string is: %s",string);
    return 0;
}

Выход:

Заключение

Несмотря на то, что обе функции, gets() и fgets(), могут использоваться для чтения входных строк. Самая большая разница между ними заключается в том, что последний позволяет пользователю указать размер буфера. Поэтому настоятельно рекомендуется вместо функции gets().

Функция gets() не поддерживает случай, когда входные данные больше размера буфера. В результате может произойти засорение памяти. Это та часть, где функция fgets() сияет и обеспечивает окончательное решение.

Рекомендации

  • /community/tutorials/strings-in-c-programming
  • https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets