6.3 技术解惑

6.3.1 gets_s函数和scanf函数的区别

scanf函数和gets_s函数都可用于输入字符串,但在功能上有所区别。若想从键盘上输入字符串“hi hello”,则应该使用gets_s函数。gets_s可以接收空格,而scanf遇到空格、回车符和制表符都会认为输入结束,所以它不能接受空格。例如:

    char string[15]; gets_s (string); /*遇到回车符为认为输入结束*/
    scanf("%s", string); /*遇到空格会认为输入结束*/

在输入字符串中包含空格时,应该使用gets输入。

在C语言中,至少有两个能够获取字符串的函数:scanf和gets_s。二者的不同点如下所示。

❑ scanf不能接受空格、制表符、回车符等。

❑ gets_s能够接受空格、制表符和回车符等。

二者的相同点如下所示:

❑ 在字符串结束后会自动加’\0'。

❑ 当scanf函数遇到回车符、空格和制表符后会自动在字符串后面添加’\0',但是回车符、空格和制表符仍会留在输入的缓冲区中。

❑ gets_s可以接受Enter键之前输入的所有字符,并用’\n’替代’\0',回车符不会留在输入缓冲区中。

❑ 用gets_s读取字符串,用Enter结束输入。

❑ scanf可以读取所有类型的变量。