C语言 scanf()和gets()函数的区别
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()函数的区别的更多相关文章
- C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用 gets 函数. gets可以接收空格:而sc ...
- [转]C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用__gets__函数. gets可以接收空格:而 ...
- R语言 sub与gsub函数的区别
> text <- c("we are the world", "we are the children") > sub("w&qu ...
- C语言scanf与get char,gets的区别
C语言scanf与get char,gets的区别 1.scanf() scanf是C语言的格式输入函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并 ...
- js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么
js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...
- C语言scanf函数返回值小记
scanf scanf是C标准库stdio里面定义的用于获取用户输入的函数,具体的介绍可以在CppReference上看到.scanf的返回值是已经成功赋值的变量个数,也就是说在 scanf(&quo ...
- (转)PHP的语言结构和函数的区别
相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...
- PHP 语言结构(Language constructs)和函数的区别
相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($username[5]) ) { // The ...
- PHP的语言结构和函数的区别
相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...
随机推荐
- (9)SpriteFrameCache和TextureCache
简介 SpriteFrameCache 主要服务于多张碎图合并出来的纹理图片.这种纹理在一张大图中包含了多张小图,直接通过TextureCache引用会有诸多不便,因而衍生出来精灵框帧的处理方式,即把 ...
- JDBC NOTE
JDBC 基本流程: 1. 加载驱动 a. SQLSERVER:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver&quo ...
- mysql索引之主键索引
MySQL目前主要有以下几种索引类型:1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 二.语句 CREATE TABLE table_name[col_name data type] [ ...
- VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)
鸡啄米上一节讲了静态文本框,本节要讲的编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框 ...
- SQL Server2008创建数据库语法
use mastergo if exists(select * from sys.databases where name='MySchool') drop database MySchool -- ...
- angular6开发不完全笔记(一) -- ng-cli
新建项目 请在终端/控制台窗口中运行 ng -v 命令. 确定您已安装@angular/cli if没有执行 npm install -g @angular/cli 全局安装 Angular CLI. ...
- VC++使用FindFirstFile,FindNextFile遍历一个文件夹
转载:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html 方法一. //遍历文件夹函数 void TraverseFol ...
- 转 已知两点坐标和半径求圆心坐标程序C++
数学思想:利用圆方程和直线方程 已知两点坐标和半径求圆心坐标程序 #include <iostream> #include <fstream> #include <c ...
- 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 ...
- .net core开发 (一)
1..net core: 是微软开发的另外一个可以跨平台的.net 2..net framework,.net core, mono的关系三者都是.net在不同操作系统的实现 3. .net core ...