以下内容主要来源:

scanf与gets读取字符串

scanf与gets函数读取字符串的区别







前两天有个同学问我scanf与gets的区别说了半天也没说出来个所以然,就搜了一下,scanf()和gets的区别大致有着几条:



1.scanf() 会忽略行开头的所有空格,并以空格、换行符结束输入;



 使用getchar()读取scanf语句执行后,缓冲区留下的换行符,



 gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替;



2. 在数据大量的情况下,用gets读取快于scanf()10倍以上(注:来自pudn,只有一段开头话)



3.



第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!

读取字符时:

scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);

getchar()以Enter结束输入,也不会舍弃最后的回车符;

读取字符串时:

scanf()以Space、Enter、Tab结束一次输入

gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!



第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:

方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!

这个函数是fflush(stdin)。

方法2:自己取出缓冲区里的残留数据。

(说实话这个语句我也没看懂,呵呵!为什么格式控制是这样的!希望高手指点一下!)

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

关于scanf与gets的区别的更多相关文章

  1. scanf()与gets()的区别

    scanf()与gets()的区别 1.scanf()可以同时接受多个字符串,而gets()一次只能接受一个字符串. #include<stdio.h>int main(){ char s ...

  2. scanf,fscanf,sscanf的区别----整理

    转自原文 scanf,fscanf,sscanf的区别----整理 scanf 从控制台输入 fscanf 从文件输入 sscanf 从指定字符串输入 1.例:使用scanf函数输入数据. #incl ...

  3. scanf与scanf_s的区别

    scanf()函数是标准C中提供的标准输入函数,用以用户输入数据 scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了 ...

  4. scanf和scanfs的区别

    scanf()函数是标准C中提供的标准输入函数,用以用户输入数据 scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了 ...

  5. C中scanf/gets/fgets的区别

    功能:同样是获取字符串. 区别: scanf 遇到空格/回车/Tab键认为输入结束, 但是空格/回车/Tab键仍会留在输入的缓冲区中.常见的是使用getchar(),处理scanf的后事:如果想要清除 ...

  6. scanf和gets的区别

    scanf和gets获取字符串时的区别  在C语言中,能构获取字符串的函数至少有两个:  1.scanf()   所在头文件:stdio.h  语法:scanf("格式控制字符串" ...

  7. scanf 与 cin 的区别

    在论坛上看到有人提出一个如下的问题,在此总结一下. 原问题: http://topic.csdn.net/u/20110414/22/90d0606c-9876-48e4-9b69-bd8bd8a41 ...

  8. scanf,fscanf,sscanf的区别

    scanf是从文件中读 sscanf是从字符串中读 scanf是从键盘输入中读   fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止.fscanf :格式 ...

  9. getchar() getch() getche() gets() puts() scanf()的用法及区别

    getchar() putchar(ch) scanf()   头文件stdio.h getch() getche()   头文件conio.h gets() puts()    头文件stdio.h ...

随机推荐

  1. EnableAutoConfiguration注解 Spring中@Import注解的作用和使用

    EnableAutoConfiguration注解 http://www.51gjie.com/javaweb/1046.html springboot@EnableAutoConfiguration ...

  2. SaltStack事件驱动 – event reactor

    Event是SaltStack里面的对每个事件的一个记录,它相比job更加底层,Event能记录更加详细的SaltStack事件,比如Minion服务启动后请求Master签发证书或者证书校验的过程, ...

  3. mysql自定义函数统计订单状态:GET_ORDER_STATUS()

    DELIMITER $$ USE `local_hnyz`$$ DROP FUNCTION IF EXISTS `GET_ORDER_STATUS`$$ CREATE DEFINER=`root`@` ...

  4. 现有.NET 开源框架浅析

    自己一直在关注框架,也喜欢捣鼓一些框架,最近我们自己一直是在用OSGI.NET 做插件式模块开发,感兴趣的可以到 http://www.iopenworks.com/   官网了解,在进行OSGI.N ...

  5. day38-进程-事件

    #1.事件Event:以交通灯为例.可以控制所有进程等待或者运行. from multiprocessing import Event e = Event() #实例化一个事件,创建一个交通灯,默认是 ...

  6. 浅谈Java中的泛型

    泛型是Java自JDK5开始支持的新特性,主要用来保证类型安全.另外泛型也让代码含义更加明确清晰,增加了代码的可读性. 泛型的声明和使用 在类声明时在类名后面声明泛型,比如MyList<T> ...

  7. 03-Java的基础语法

    一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的 ...

  8. Windows2012R2 设置NTP时间服务器

    一.服务端配置 (Ntp服务器,客户端将根据这台服务器的时间进行同步) 1.微软键+R键,进入“运行”,输入“regedit”,进入注册表 2. HKEY_LOCAL_MACHINE\SYSTEM\C ...

  9. 2.Redis数据类型

    Redis中存储数据是通过key-value存储的,对于value的类型有以下几种: 字符串 Hash类型 List Set SortedSet(zset) 注:在redis中的命令语句中,命令是忽略 ...

  10. Python opencv PIL numpy base64互相转化

    PIL2numpy and numpy2PIL from PIL import Image import numpy image = Image.open('timg.jpeg')# image is ...