标准输入的原理:cin与scanf
1.cin 该方法
1)假设cin读取整数。会自己主动忽略换行和空格。遇到文件结束标记。cin >> a返回的数false
int a;
while(cin >> a){
cout << a <<endl;
}
return 0;
eg:1, 2, 3
1 2
3
1 a
2
a 1
2
注意:cin读取到'a'字符的时候,假设是cin> (int);那么此时cin返回false, 同一时候读到变量a中的整数是0。假设是\n\r,那么将自己主动忽略;
2) cin读取字符串。会将\n作为字符串的切割符
string a;
while(cin >> a){
cout << a;
}
注意:空格将被当作切割符,不会被存储到a之中;另外,我们在标准输入中写"\n"是没有换行的效果的,这样被存储的是两个字符;而我们用键盘的回车键那么存储的将是"\n"字符。
3)cin 读取字符串 char *
读取完成,会自己主动将\n转换成\0
4)假设遇到文件结束。那么也将返回false
2.scanf的处理方式
对标准输入的理解:默认情况下,scanf 是从标准输入中读取字符。然后进行相关转化;假设是空格或者换行,直接跳过,假设不符合格式化要求,那么scanf不处理同一时候也不减小缓冲区中的信息。
1)读取整数:
int a=12;
while( scanf("%d", &a)!=EOF ){
cout << a <<endl;
}
如此。假设我们输入'a'。那么将陷入死循环
2)读整数scanf("%d,%d", &a, &b)是可行的。可是读取字符串scanf("%s,%s")是不可行的
对输入过程的理解:输入过程包括两个部分。第一部分须要我们将数据送到键盘缓冲区。这个过程是依照行缓冲的;
第二个过程,是依照格式化要求从缓冲区中读取数据到对应内存空间;
3)混合输入
int a=12, b=12;
char c='C';
cout << scanf("%d%d%c", &a, &b , &c);
假设我们输入"123 a1", 那么将输处1。 b和c都没有被赋值。也就是说scanf并不能保证后面的參数都被正确赋值
3.fgets的处理方式
首先,gets和fgets都能处理字符串的输入问题,并且都能进入空格。除了那个,fgets不转换\n成为\0.
版权声明:本文博客原创文章,博客,未经同意,不得转载。
标准输入的原理:cin与scanf的更多相关文章
- cin 与 scanf 的不同
cin输入更方便: 首先,cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,其次,cin 所属的类重载了 >> 运算符,使输入更简单了,比如 ...
- 关于cin,getchar(),scanf()的注意事项(转)
问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些 ...
- while ((ch = getchar()) != EOF)中ch定义为char还是int型?cin、scanf等如何结束键盘输入
2013-07-09 18:55:42 EOF是文件的结束符,具体可以作为文本文件的结束符,也可以作为键盘输入char类型数据时的结束符.对于不同的系统,EOF的定义可能不同,一般定义为-1.因为ch ...
- cin 和scanf,scanf比cin快很多
//#include <iostream> #include <stdio.h> //#include <fstream> //using namespace st ...
- c++获取键盘输入cin、scanf使用详解
cin是c++标准,scanf是在c中使用的 #include<cstdio> #include<iostream> #include<cstring> using ...
- cin和scanf的速度差别
好长时间没有遇到这种问题了,以前虽然知道scanf比cin快,但是没想到快这么多,见图. 50万的数据. scanf输入: cin输入: 网上说用std::ios::sync_with_stdio(f ...
- 一个能让cin和scanf 一样快的方法:
cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱.正因为这个兼容性的 ...
- 在c++中,标准输入string时cin 与getline两个函数之间的区别
cin: cin函数是标准库的输入函数,在读取string时遵循以下规则: 1)读取并忽略开头所有的空白符(包括空格.换行符.制表符). 2)读取字符直到遇到空白符,读取终止. 例如: 当输入的是“ ...
- C++-cin与scanf cout与printf效率问题
http://blog.csdn.net/l2580258/article/details/51319387 void cin_read_nosync() { freopen("data.t ...
随机推荐
- JavaWeb图表插件的小研究
背景 近期的一个项目中,对数据的统计分析有非常大的要求,这就要求有一款非常强大的报表.图表插件.因此,组长给分了任务.让我们各自去研究不同的图表插件.用了一两天的时间,对java这块的图表插件做了一个 ...
- UVA 2039 Pets(网络流)
Problem Description Are you interested in pets? There is a very famous pets shop in the center of th ...
- 如何将内存中的位图数据绘制在DC上
假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据.然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了.主要信息包含在位图信息头里面,数据则在位图数据缓冲里面. ...
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)
昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...
- 引用iscroll的一个封装方法
var Page = function(cid, data,callback) { var _self = this; var cid = $(cid); var currPage=1; // 下拉上 ...
- Java面试宝典2014版
一. Java基础部分......................................................................................... ...
- 由于“Table(T_Test)”没有主键,因此无法在其上执行 Create、Update 或 Delete 操作
在使用Linq To Sql查询的时候,遇到这么个问题,如图所示: 出现这个问题的原因就像途中所说的——没有主键(现在终于初步知道“为什么别人常说数据库中的逻辑主键是为了在编程中方便使用”的原因了,估 ...
- IOS UITableView单条刷新,数据不刷新解决方案
在使用 UITableView 进行某设置页面的设计时,由于设计页面有固定的section个数和row个数,而数据又需要根据用户的修改情况进行改变,所以我们往往不会为每个cell单独写一个类,而是直接 ...
- 5.中文问题(自身,操作系统级别,应用软件的本身),mysql数据库备份
第一层因素: mysql的自身的设置 mysql有六处使用了字符集.分别为:client .connection.database.results.server .system. mysql&g ...
- Windows 编程之 对话框总结
关于对话框 1 对话框种类 对话框也是一种资源,Windows中对话框分为模态的和非模态的,以及Windows系统中已经定义好的那些通用对话框,比方打开文件,目录,调色板,字符串查找等. 2 模态对话 ...