C语言 scanf()和gets()函数的区别

1.相同点:scanf( )函数和gets( )函数都可用于输入字符串

2.不同点:两者在功能上有所区别,具体区别如下:

要实现如下需求“从控制台输入字符串”有如下两种实现方式:

1>使用gets()函数实现

char str[];

printf("Input a string:\n");

gets(str);

printf("%s\n",str);

使用上诉代码实现时,我们会发现控制台打印如下信息:[即警告gets()是不安全的]

gets()函数总结:

(1)gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。

(2)可以用来输入带空格的字符串。

(3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出

2>使用scanf()函数实现

char str[];

printf("Input a string:\n");

scanf("%s",str);

printf("%s\n",str);

使用上诉代码实现时,我们会发现控制台打印如下信息:【输入:hello BJS150940 但是只能输出:hello】

scanf()函数总结:

(1)scanf() 以 空格 或 回车符 结束读取,空格 或 回车符 会遗留在缓冲区。

(2)不能直接输入带空格的字符串。

注意:scanf()函数如何才能输入带空格的字符串,应使用:【具体代码和输出内容如下:】

scanf("%[^\n]", a);  //%[]输入字符集, [^\n] 表示除了'\n'之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串

char str[];

printf("Input a string:\n");

scanf("%[^\n]",str);

printf("%s\n",str);

转:循环输入一个字符,怎么样才能保证输入正常呢,仅需添加一句代码(取出缓冲区里特殊的空格和\n即可)即可具体代码段如下:

就是这么简单,仅仅一个缓冲区,各种效果,是不是很神奇,哈哈,这就是编程的乐趣。。。。奋斗奋斗

C语言 scanf()和gets()函数的区别的更多相关文章

  1. C语言 gets()和scanf()函数的区别

    scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用 gets 函数. gets可以接收空格:而sc ...

  2. [转]C语言 gets()和scanf()函数的区别

    scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用__gets__函数. gets可以接收空格:而 ...

  3. R语言 sub与gsub函数的区别

    > text <- c("we are the world", "we are the children") > sub("w&qu ...

  4. C语言scanf与get char,gets的区别

    C语言scanf与get char,gets的区别 1.scanf() scanf是C语言的格式输入函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并 ...

  5. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  6. C语言scanf函数返回值小记

    scanf scanf是C标准库stdio里面定义的用于获取用户输入的函数,具体的介绍可以在CppReference上看到.scanf的返回值是已经成功赋值的变量个数,也就是说在 scanf(&quo ...

  7. (转)PHP的语言结构和函数的区别

    相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...

  8. PHP 语言结构(Language constructs)和函数的区别

    相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($username[5]) ) { // The ...

  9. PHP的语言结构和函数的区别

    相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...

随机推荐

  1. (9)SpriteFrameCache和TextureCache

    简介 SpriteFrameCache 主要服务于多张碎图合并出来的纹理图片.这种纹理在一张大图中包含了多张小图,直接通过TextureCache引用会有诸多不便,因而衍生出来精灵框帧的处理方式,即把 ...

  2. JDBC NOTE

    JDBC 基本流程: 1. 加载驱动 a. SQLSERVER:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver&quo ...

  3. mysql索引之主键索引

    MySQL目前主要有以下几种索引类型:1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 二.语句 CREATE TABLE table_name[col_name data type] [ ...

  4. VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)

    鸡啄米上一节讲了静态文本框,本节要讲的编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框 ...

  5. SQL Server2008创建数据库语法

    use mastergo if exists(select * from sys.databases where name='MySchool') drop database MySchool  -- ...

  6. angular6开发不完全笔记(一) -- ng-cli

    新建项目 请在终端/控制台窗口中运行 ng -v 命令. 确定您已安装@angular/cli if没有执行 npm install -g @angular/cli 全局安装 Angular CLI. ...

  7. VC++使用FindFirstFile,FindNextFile遍历一个文件夹

    转载:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html 方法一. //遍历文件夹函数 void TraverseFol ...

  8. 转 已知两点坐标和半径求圆心坐标程序C++

      数学思想:利用圆方程和直线方程 已知两点坐标和半径求圆心坐标程序 #include <iostream> #include <fstream> #include <c ...

  9. Codeforces Beta Round #57 (Div. 2) A,B,C,D,E

    A. Ultra-Fast Mathematician time limit per test 2 seconds memory limit per test 256 megabytes input ...

  10. .net core开发 (一)

    1..net core: 是微软开发的另外一个可以跨平台的.net 2..net framework,.net core, mono的关系三者都是.net在不同操作系统的实现 3. .net core ...