c语言获取用户输入字符串是scanf和gets的区别详解

 更新时间:2018年07月20日 08:51:46   作者:cowoc1961331326  
今天小编就为大家分享一篇c语言获取用户输入字符串是scanf和gets的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

解释

gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

1.scanf()

所在头文件:stdio.h

语法:scanf("格式控制字符串",变量地址列表);

接受字符串时:scanf("%s",字符数组名或指针);

2.gets()

所在头文件:stdio.h

语法:gets(字符数组名或指针);

两者在接受字符串时:

1.不同点:

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等;

2.相同点:

字符串接受结束后自动加'\0'。

例1:

#include <stdio.h>
int main()
{
  char ch1[10],ch2[10];

  scanf("%s",ch1);
  gets(ch2);

return 0;
}

依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asd fg\0"。

程序2:

#include <stdio.h>
int main()
{
char str1[20], str2[20];
scanf("%s",str1);
printf("%s\n",str1); 
scanf("%s",str2);
printf("%s\n",str2);
return 0;
}

程序的功能是读入一个字符串输出,再读入一个字符串输出。可我们会发现输入的字符串中不能出现空格,例如:

测试一输入:

Hello word(enter)

输出:

Hello
world!

程序3:

#include <stdio.h>
int main()
{
char str1[20], str2[20];
gets(str1);
printf("%s\n",str1); 
gets(str2);
printf("%s\n",str2);
return 0;
}

测试:

Helloworld! [输入]
Helloworld! [输出]
12345 [输入]
12345 [输出]

【分析】显然与上一个程序的执行情况不同,这次程序执行了两次从键盘的读入,而且第一个字符串取了Helloworld! 接受了空格符,而没有像上一个程序那样分成了两个字符串!所以如果要读入一个带空格符的字符串时因该用gets(), 而不宜用scanf()!

以上这篇c语言获取用户输入字符串是scanf和gets的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C/C++产生随机数函数简单介绍

    C/C++产生随机数函数简单介绍

    这篇文章主要为大家详细介绍了C/C++产生随机数函数的实现方法,如何使用C/C++产生随机数函数,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • C语言中字符串的两种定义方式详解

    C语言中字符串的两种定义方式详解

    这篇文章主要为大家详细介绍了C语言中字符串的两种定义方式,小编觉得这篇文章写的还不错,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 详解C++文件读写操作

    详解C++文件读写操作

    这篇文章主要为大家详细介绍了C++文件读写操作,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • C语言实现万年历效果

    C语言实现万年历效果

    这篇文章主要为大家详细介绍了C语言实现万年历效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C++分析类的对象作类成员调用构造与析构函数及静态成员

    C++分析类的对象作类成员调用构造与析构函数及静态成员

    终于到了对象的初始化和清理的最后阶段了,在这里分享一个cpp里有多个类时,一个类的对象作为另一个类成员的时候构造函数和析构函数调用的时机。还有一个静态成员也是经常考到的点,在这篇博客将会详解其概念并举出案例巩固,让我们开始
    2022-05-05
  • C语言实现单链表实现方法

    C语言实现单链表实现方法

    这篇文章主要介绍了C语言实现单链表实现方法的相关资料,链表分为单向链表、双向链表、循环链表,需要的朋友可以参考下
    2017-08-08
  • C++、python和go语言实现的简单客户端服务器代码示例

    C++、python和go语言实现的简单客户端服务器代码示例

    这篇文章主要介绍了C++、python和go语言实现的简单客户端服务器代码示例,本文分别给出了3种语言的客户端服务器通信代码实例,需要的朋友可以参考下
    2015-03-03
  • C++项目基于HuffmanTree实现文件的压缩与解压缩功能

    C++项目基于HuffmanTree实现文件的压缩与解压缩功能

    这篇文章主要介绍了C++项目基于HuffmanTree实现文件的压缩与解压缩功能,本文给大家提到文件压缩的概念介绍及压缩方法,通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • C语言实现客房管理系统

    C语言实现客房管理系统

    这篇文章主要为大家详细介绍了C语言实现客房管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • VS2019中CMake项目如何指定c++语言标准

    VS2019中CMake项目如何指定c++语言标准

    这篇文章主要介绍了VS2019中CMake项目如何指定c++语言标准,需要的朋友可以参考下
    2020-02-02

最新评论