我们都熟悉scanf()
功能。它是适用于获取基本用户输入的主要功能。虽然scanf()
在接受诸如以下输入时效果很好整数、字符、浮点数 等等。在获取包含空格的字符串输入时,它肯定会落后。让我们看一个例子,
# include <stdio.h>
int main ( )
{
char string[ 10 ] ;
printf ( "Enter the string: " ) ;
scanf ( "%s" , string) ;
printf ( "\n %s" , string) ;
return 0 ;
}
Output:
Problem With scanf()
从上面的例子我们可以观察到。scanf()
一遇到就停止扫描空白 或换行符。事实上,这使得使用字符串输入scanf()
有点麻烦。通过使用其他一些输入函数可以轻松避免这种情况,例如gets()
and fgets()
.
在本文中,我们将学习如何应用这两个函数并对它们进行比较。
gets()
是 C 中的预定义函数,用于读取字符串或文本行。并将输入存储在定义明确的字符串变量中。一旦遇到一个函数,它就会终止它的读取会话换行符 .
Syntax:
获取(变量名);
下面给出的代码说明了使用gets()
功能,
# include <stdio.h>
int main ( )
{
char string[ 10 ] ;
printf ( "Enter the String: " ) ;
gets ( string) ;
printf ( "\n%s" , string) ;
return 0 ;
}
Output:
Use Of Gets
将输出与使用时的输出进行比较scanf()
. '你好世界' 现在被视为single string.
标准C 库还为我们提供了另一个函数,fgets()
功能。该函数从指定的文件或控制台读取文本行或字符串。然后将其存储到相应的字符串变量中。
类似于gets()
函数中,fgets 每当遇到newline 特点。但除此之外,与gets()
,该函数也会停止,当EOF 达到或者即使字符串长度超过指定的限制,n-1.
Syntax,
fgets(char *str, int n, FILE *stream)
str - 这是要存储字符串的变量
n - 应该读取的字符串的最大长度
stream - 它是文件句柄,从中读取字符串。
幸运的是,我们都可以使用以下命令从文件或标准输入流中读取文本行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() 示例!” 。在这种情况下,上述代码的输出将是:
fgets() file input
# 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 ;
}
Output:
fgets() Stdin Input
尽管两者都有功能,gets()
and fgets()
可用于读取字符串输入。两者最大的区别是后者允许用户指定缓冲区大小 。因此强烈推荐gets()
功能。
The gets()
如果输入大于缓冲区,函数没有提供这种情况。因此,内存堵塞 可能发生。这是fgets()
功能大放异彩,提供终极解决方案。
/community/tutorials/c 语言编程中的字符串
https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets