C 语言程序中的 fgets() 和 gets()

简介

我们都熟悉scanf()函数。它是适用于获取基本用户输入的主要功能。尽管scanf()在接受整数、字符、浮点 等输入时工作得很好,但在接受包含空格的字符串输入时肯定会落后。让我们来看一个例子,

1#include<stdio.h>
2int main()
3{
4    char string[10];
5    printf("Enter the string: ");
6    scanf("%s", string);
7    printf("\n %s",string);
8    return 0;
9}

输出:

Scanf

从上面的例子可以看出。scanf()在遇到 空白 或换行符时停止扫描。事实上,这使得使用scanf()获取字符串输入有点麻烦。这可以很容易地避免使用一些其他的输入函数,如gets()fgets()

在本文中,我们将学习如何应用这两个函数并对它们进行比较。

C中的GETS()函数

get()是C中预定义的函数,用于读取字符串或文本行。并将输入存储在定义良好的字符串变量中。该函数在遇到换行符 时立即终止其阅读会话。

语法:

GETS(变量名);

下面给出的代码说明了gets()函数的用法,

1#include<stdio.h>
2int main()
3{
4    char string[10];
5    printf("Enter the String: ");
6    gets(string);
7    printf("\n%s",string);
8    return 0;
9}

输出:

使用Gets()

将输出与使用scanf()时的输出进行比较。‘Hello World’ 现在被视为** 单个** 字符串。

C++中的fget()函数

标准的C 库还为我们提供了另一个函数,即fget()函数。该函数从指定的文件或控制台读取文本行或字符串。然后将其存储到相应的字符串变量。

gets()函数类似,fgets也会在遇到 换行符 时终止读取。但是,与gets()不同的是,当达到 ** n** 或字符串长度超过指定的限制 ** n-1** 时,函数也会停止。

语法,

fget(char ** str,int n,file stream)**

  • str -它是要存储字符串的变量
  • n -应读取的字符串的最大长度
  • STREAM -它是文件句柄,从中读取字符串。

幸运的是,我们都可以使用fget()函数从文件或标准输入流中读取文本行。让我们看看如何

1.使用fget()读取指定文件

例如,

 1#include<stdio.h>
 2int main()
 3{
 4    char string[20];
 5    FILE *fp;
 6    fp=fopen("file.txt","r");
 7    fgets(string,20,fp);
 8    printf("The string is: %s",string);
 9    fclose(fp);
10    return 0;
11}

考虑file.txt 包含行** ‘JournalDev fget()Example!’** 。在这种情况下,上述代码的输出将是,

Fget输出

2.使用fget()读取标准输入

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

输出:

Fget()stdin输入

结论

尽管get()fget()这两个函数都可以用于读取字符串输入。两者最大的区别是后者允许用户指定缓冲区大小 。因此,强烈建议您使用它而不是get()函数。

如果输入大于缓冲区,则get()函数不支持这种情况。因此,可能会出现内存阻塞 。这是fget()函数大放异彩并提供最终解决方案的地方。

参考文献

Published At
Categories with 技术
Tagged with
comments powered by Disqus