标准输入的原理: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 ...
随机推荐
- uva 10127 - Ones(数论)
题目链接:uva 10127 - Ones 题目大意:给出n,问说者少要多少为1才干够整除n. 解题思路:等于是高精度取模,直到余数为0为止. #include <cstdio> #inc ...
- EasyUI - SplitButton 分割按钮
效果: html代码: <!--使用标签创建,直接使用即可,不必使用js代码--> <%--<a href="javascript:void(0)" id= ...
- android设置背景图片透明
设置Activiyt为透明可以在Activity中引用系统透明主题android:theme="@android:style/Theme.Translucent" 设置背景图片透明 ...
- 为什么java源文件中只允许一个public类存在
1.提出问题 为什么java源文件中只允许一个public类存在? 2.分析问题 问题涉及到的条件:源文件的名字 public类 main方法 一般我们在编写一个源文件的时候: 一个pu ...
- 怎样查看apk须要支持的Android版本号
假设有一个apk,须要知道他最低安装支持的Android版本号是什么,应该怎样查看呢? 直接将apk后缀名改为rar或者zip,拉出AndroidManifest.xml?不行,AndroidMani ...
- html适配Anroid手机
本文全然是翻译与总结谷歌官方的教程,已确保文档的正确性. 免得大家被五花八门的其它的资料弄混了,也没有系统行的学习. 一.设置窗体尺寸和适配屏幕分辨率 谷歌官方文档提到两个大的方面. 1.Viewpo ...
- UML基本架构建模--类概述
Classes 类 Classes are the most important building block of any object-oriented system. A class is ...
- Photon的使用
这几个月给公司一个正在做的半吊子游戏加pvp功能,一个人居然要2个多月弄个 PVP 类似 Dota 对战的游戏.我手里有套现成搭建服务端架构都没敢用起来,这服务器还是太初步了,只是验证了 Boost ...
- Swift - 标签条(UITabBar)标签页控制器(UITabBarController)用法
App底部的tab标签页可以方便的把功能模块划分清楚,只需点击相应的标签页就可以展示完全独立的视图页面,同时各标签页间的视图也可以进行数据交换. TabBarItem系统自带图标样式(System ...
- swt,jface,rcp
//swt-jface-rcp,基本结构:display类,shell类,组件:widget窗口控件,control控件,composites面板,button,label,text文本框,list列 ...