简介
我们都熟悉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()
获取字符串输入有点麻烦。这可以很容易地避免使用一些其他的输入函数,如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}
输出:
将输出与使用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!’** 。在这种情况下,上述代码的输出将是,
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}
输出:
结论
尽管get()
和fget()
这两个函数都可以用于读取字符串输入。两者最大的区别是后者允许用户指定缓冲区大小 。因此,强烈建议您使用它而不是get()
函数。
如果输入大于缓冲区,则get()
函数不支持这种情况。因此,可能会出现内存阻塞 。这是fget()
函数大放异彩并提供最终解决方案的地方。