C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用 gets 函数。
gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。
char string[15]; gets(string); /*遇到回车认为输入结束*/
scanf("%s",string); /*遇到空格认为输入结束*/
所以在输入的字符串中包含空格时,应该使用gets输入。
scanf和gets获取字符串时的区别
在C语言中,能构获取字符串的函数至少有两个:
1.scanf()
所在头文件:stdio.h
语法:scanf("格式控制字符串",变量地址列表);
接受字符串时:scanf("%s",字符数组名或指针);
2.gets()
所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点:
scanf不能接受空格、制表符Tab、回车等;对末尾回车符的处理:把回车符保留在缓存中。
而gets能够接受空格、制表符Tab和回车等;对末尾回车符的处理:接收回车,但把回车替换为\0.
2.相同点:
字符串接受结束后自动加'\0'。
例1:
#include <stdio.h>
main()
{
char ch1[10],ch2[10];
scanf("%s",ch1);
gets(ch2);
}
依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asd fg\0"。
例2:
#include <stdio.h>
main()
{
char ch1[10],ch2[10],c1,c2;
scanf("%s",ch1);
c1=getchar();
gets(ch2);
c2=getchar();
}
依次键入asdfg回车,asdfg回车,则ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需输入。
scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中
gets()用到读取字符串,用回车结束输入
scanf()可以读取所有类型的变量
案例:
第一段:
scanf("%lf",&f);getchar();
gets(a);
gets(b); 第二段:
scanf("%lf",&f);
scanf("%s",a);
scanf("%s",b);
假如第一段不加getchar,那么即便是在正确输入的情况下,输入结果也是不正确的。
所以,scanf函数遇到空白符则认为输入结束。gets遇到回车才结束输入。
scanf函数会把回车符放在缓冲区,gets则会把回车符换成\0 .
(转载自:http://leoenglish.blog.163.com/blog/static/1750319852011296336486/)
C语言 gets()和scanf()函数的区别的更多相关文章
- C语言中关于scanf函数的用法
scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化 ...
- 【C语言】gets()和scanf()函数的区别
scanf函数与gets函数 scanf函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用gets函数. gets ...
- C语言基础之scanf函数的使用
0.自己实际遇到的坑 Mac下如果用标准键盘,使用scanf输入时不能用小键盘上的回车,否则系统不能很好的识别. 1.scanf函数的基本使用 1: // 定义一个变量,用来保存用户输入的整数 2: ...
- C语言gets雨scanf函数的用法
/*1.不同点: scanf不能接受空格.制表符Tab.回车等: 而gets能够接受空格.制表符Tab和回车等: 2.相同点: 字符串接受结束后自动加'\0'. 使用scanf("%s&q ...
- R语言 sub与gsub函数的区别
> text <- c("we are the world", "we are the children") > sub("w&qu ...
- C语言 scanf()和gets()函数的区别
C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求“从控制台输入字 ...
- [转]C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用__gets__函数. gets可以接收空格:而 ...
- 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1> 简单介绍一下scanf函数 这是在 ...
- C语言scanf函数详解
函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...
随机推荐
- LinkedList源码分析
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的.基于链表也决定了它在随机访问方面要比ArrayList逊色 ...
- 判断json数据是否为空
json数据是没有length这个属性的 ,所以不能直接用.length()方法 我们可以先遍历,然后根据遍历次数求长度 1.在IE上这样遍历json:(js代码) var jsonLength = ...
- js根据当前时间获取当前季度,月份,和第几周
function jidu() { var getMonthWeek = function (a, b, c) { var date = new Date(a, parseInt(b) - ...
- putty自动登录
如果没有公钥/密钥对,就用 PuTTYgen 创建一个,已经有了就可以忽略这一步.一个公钥/密钥对可以用在不同的服务器上,所以也不需要重复创建,关键要有足够强健的密码和安全的存放. 象先前一样输入帐户 ...
- EaseType缓动函数
http://sol.gfxile.net/interpolation/ 一篇很详细的图文
- 编写HTML表单提交并接受数据信息(获取用户通过表单提交的内容)
MyInfoForm.java package com.fxl; import java.io.IOException; import java.io.PrintWriter; import java ...
- iPhone/iPad/Android UI尺寸规范
iPhone界面尺寸
- c#调用存储过程
存储过程(Stored Procedure)即用来存储数据表操作的一个过程,是把对数据表操作的方法存储到一起的一个对象,是存储在数据库中. 优点:1.降低网络传输数据量:通过存储过程的名称和参数传递即 ...
- 2015 "BestCoder Cup" Champion
这场比赛我没有参加,不过就算参加了也估计是被完虐.于是看着题解把大部分题目都搞了一遍. T1:Movie(hdu 5214) 题目大意: 给出N个区间,问能否选出3个互不相交的区间. N<=10 ...
- CentOS6.4安装Hadoop2.0.5 alpha - 3-Node Cluster
1.在第2个个节点上重复http://www.cnblogs.com/littlesuccess/p/3361497.html文章中的第1-5步 2.修改第1个节点上的hdfs-site.xml中的配 ...