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的更多相关文章

  1. cin 与 scanf 的不同

    cin输入更方便: 首先,cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,其次,cin 所属的类重载了 >> 运算符,使输入更简单了,比如 ...

  2. 关于cin,getchar(),scanf()的注意事项(转)

      问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些 ...

  3. while ((ch = getchar()) != EOF)中ch定义为char还是int型?cin、scanf等如何结束键盘输入

    2013-07-09 18:55:42 EOF是文件的结束符,具体可以作为文本文件的结束符,也可以作为键盘输入char类型数据时的结束符.对于不同的系统,EOF的定义可能不同,一般定义为-1.因为ch ...

  4. cin 和scanf,scanf比cin快很多

    //#include <iostream> #include <stdio.h> //#include <fstream> //using namespace st ...

  5. c++获取键盘输入cin、scanf使用详解

    cin是c++标准,scanf是在c中使用的 #include<cstdio> #include<iostream> #include<cstring> using ...

  6. cin和scanf的速度差别

    好长时间没有遇到这种问题了,以前虽然知道scanf比cin快,但是没想到快这么多,见图. 50万的数据. scanf输入: cin输入: 网上说用std::ios::sync_with_stdio(f ...

  7. 一个能让cin和scanf 一样快的方法:

    cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱.正因为这个兼容性的 ...

  8. 在c++中,标准输入string时cin 与getline两个函数之间的区别

    cin: cin函数是标准库的输入函数,在读取string时遵循以下规则: 1)读取并忽略开头所有的空白符(包括空格.换行符.制表符). 2)读取字符直到遇到空白符,读取终止. 例如: 当输入的是“  ...

  9. C++-cin与scanf cout与printf效率问题

    http://blog.csdn.net/l2580258/article/details/51319387 void cin_read_nosync() { freopen("data.t ...

随机推荐

  1. 最短路径A*算法原理及java代码实现(看不懂是我的失败)

    算法仅仅要懂原理了,代码都是小问题,先看以下理论,尤其是红色标注的(要源代码请留下邮箱,有測试用例,直接执行就可以) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路 ...

  2. Delphi - SEH研究

    技术交流,DH讲解. 前几天一个朋友在弄游戏外挂想带NP调试,就像自己来捕获游戏的异常.好像就要用到SEH这方面的知识.一起研究了一下,这里看下研究 和 在网上找的资料吧.SEH就是Structure ...

  3. 鼠标进入与离开的消息(使用CM_MOUSEENTER来判断是否进入控件)

    unit Unit1; interface uses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs ...

  4. 14.18 InnoDB Backup and Recovery 备份和恢复:

    14.18 InnoDB Backup and Recovery 备份和恢复: 安全数据库管理的关键是 做定期的备份,依赖你的数据卷, MySQL server的数量和数据库的负载,你可以使用那些技术 ...

  5. Windows Azure 安全最佳实践 - 第 4 部分:需要采取的其他措施

    那么,哪些安全威胁应由WindowsAzure环境缓解?哪些安全威胁必须由开发人员缓解? 开发 Windows Azure 应用程序的最佳安全做法一文说明了对于在 Windows Azure 中运行的 ...

  6. 【UML九种图系列】之如何利用三层来绘制类图、时序图?

    UML并发视图:实体之间行为的交互,是动态.分为:时序图.协作图.状态图.活动图 一.时序图简述: 时序图(Sequence Diagram):描述对象之间的交互行为,按照时间顺序排列. 元素: 角色 ...

  7. ASP.NET - TreeView 增删

    效果: 前端代码: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Si ...

  8. Servlet的学习之Response响应对象(1)

    在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...

  9. unix ourhdr.h myerr.h

    //在学UNIX环境高级编程时把下面两个头文件与源文件放在同一个文件下就可以正常编译了,我的是在ubuntu 12.04环境下,第一个程序编译和运行成功了,希望对大家有帮助(我已经根据网上的资料修改好 ...

  10. iphone缩小uIImage图片

    UIImage的缩小 有时候,项目中,要用到上传图片,从图片库里取出的图片有的太大了,而要上传的时候,会很费时间,而且也没必要太大,所以就把图片综缩小一下,再传! #pragma UIImagePic ...