gets(),fgets()的作用机制探究

gets(),fgets()

scanf("%d",&a)若接受形如

2

这样的输入后,缓冲区内会留一个\n,此后若调用gets等函数时会读出这个换行出现错误,需注意

fgets(),gets()读到\n处会停止,从而缓冲区内会留下一个\n,从而使以后的输入出现错误,需要用getchar()等方式处理掉

对各种方式的gets(),fgets()的测试:

测试例程:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<queue>
 6
 7 using namespace std;
 8
 9 #define N 51
10 #define A 105
11
12 char maze[N][N];
13 int g[A][A];
14 int x,y;
15
16 int main()
17 {
18     int count;
19     scanf("%d",&count);
20     while (count--)
21     {
22         memset(maze,-1,sizeof(maze));
23         scanf("%d%d\n",&x,&y);
24         for (int i=0;i<y;i++)
25         {
26             fgets(maze[i],x+1,stdin);
27 //            getchar();
28         }
29
30     }
31     return 0;
32 }

测试数据:

2
6 5
###   (每行6个字符,包括空格,不包括换行符)
#A#A##
# # A#
#S ##
#####

每行后均有换行符

测试:

maze全初始化为-1

由测试结果可知:gets():当读到换行符时停止,换行符一起读出缓冲区并写入字符串末尾

        fgets(char*,int num,FILE*):最多读入num-1个字符,并将第num位置为\0(若读入字符小于num-1个,则读入\n或EOF后将其之后一位置为\0,结束)(若读到换行符,换行符也写入文件末尾)

        

        

时间: 2024-08-04 03:44:15

gets(),fgets()的作用机制探究的相关文章

Elasticsearch分布式机制探究

Elasticsearch是一套分布式的系统,分布式是为了应对大数据量隐藏了复杂的分布式机制 分片机制 shard = hash(routing) % number_of_primary_shards Routing值可以是一个任意的字符串,默认情况下,它的值为存数数据对应文档 _id 值,也可以是用户自定义的值.Routing这个字符串通过一个hash的函数处理,并返回一个数值,然后再除以索引中主分片的数目,所得的余数作为主分片的编号,取值一般在0到number_of_primary_shar

javascript的单线程异步机制探究

JavaScript的同步异步模式 JavaScript的语言执行环境都是单线程.单线程就是想排队那样任务需要按顺序一个一个的完成.这种模式的好处是实现起来简单,但是坏处就是如果队列中有一个任务耗费时间很长,那后边的任务就必须等前一个执行完,会拖延整个程序的执行. 为了优化这个问题,JavaScript语言将任务的执行模式分成两种,同步(Synchronous)和异步(Asynchronous). 同步模式就是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的.同步

安卓事件传递机制探究

目前的理解: 1.当点击按钮时,分别依次被捕捉的事件是DOWN,MOVE,UP 2.在UP时,事件流才会处理到CLICK事件 3.  Activity---dispatchTouchEvent---DOWN RTLayout---dispatchTouchEvent---DOWN RTLayout---onInterceptTouchEvent---DOWN RTButton---dispatchTouchEvent---DOWN  RTButton---onTouch---DOWN RTBut

iOS 视图,动画渲染机制探究

腾讯Bugly特约作者:陈向文 终端的开发,首当其冲的就是视图.动画的渲染,切换等等.用户使用 App 时最直接的体验就是这个界面好不好看,动画炫不炫,滑动流不流畅.UI就是 App 的门面,它的体验伴随着用户使用 App 的整个过程.如果UI失败,用户是不会有打开第二次的欲望的. iOS 为开发者提供了丰富的 Framework(UIKit,Core Animation,Core Graphic,OpenGL 等等)来满足开发从上层到底层各种各样的需求.不得不说苹果很牛逼,很多接口你根本不需要

Java中Iterator(迭代器)的用法及其背后机制探究

在Java中遍历List时会用到Java提供的Iterator,Iterator十分好用,原因是: 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator.第一次调用Iterator的next()方法时,它返回序列的第一个元素.注意:iterator()方法是jav

php中session的生成机制、回收机制和存储机制探究

1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问,我们都知道session是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?这个时候就得借助cookie了.当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件.sessio

玩转CONSUL(1)–WATCH机制探究

1. 前言 consul 经常被用于服务的注册和发现,本文将带你对watch做更深入的探究 2. consul对外暴露了4种通讯接口 2.1 RPC 主要用于内部通讯Gossip/日志分发/选主等 2.2 HTTP API 服务发现/健康检查/KV存储等几乎所有功能默认端口为8500 2.3 Consul Commands (CLI) consul命令行工具可以与consul agent进行连接,提供一部分consul的功能.实时上Consul CLI 默认就是调用的HTTP API来与cons

Android Touch消息传递机制探究分析

在Android中,消息的传递控制主要是通过两个方法共同配合使用来对用户的触摸消息进行分发的,下面就来看看这两个方法: onInterceptTouchEvent:此方法定义于ViewGroup中,顾名思义,这个方法是用于ViewGroup拦截(intercept)触摸消息的: onTouchEvent:此方法定义于View中,用于处理用户的触摸事件: 下面来看这两个方法的定义原型: public boolean onInterceptTouchEvent(MotionEvent ev); pu

剖析源码:浅谈react-infinite的机制与原理

最近又读了一个轮子的源码,react-infinite,虽然star数量不是特别多,1.5k,不过还是个非常实用的轮子,今天给大家讲的是它的原理和实现,并不是如何去使用它,如何使用官方文档上都有.了解了它的原理,你就不一定要全盘使用它,你可以自己剥离一部分实际要用的东西出来,自己写一个合适的轮子用到项目中去(不要为了一个功能去使用一整个框架或者插件). 说了那么多废话,它是用来干嘛的? 官方解释:A browser-ready efficient scrolling container base