标准输入的原理: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.

时间: 2024-12-12 16:53:30

标准输入的原理:cin与scanf的相关文章

cin 与 scanf 的不同

cin输入更方便: 首先,cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,其次,cin 所属的类重载了 >> 运算符,使输入更简单了,比如 double d; cin>>d;而 scanf 不一样的,double d;scanf("%lf",&d);看起来麻烦一点.另外,cin 也更安全,不会发生内存溢出.char c; scanf("%lf",&c); //这时需要8个字节的

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

  问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因.下面先看一个很简单的程序:程序1:    #include <stdio.h>    int main()    {char ch1, ch2;scanf("%c", &ch1); scanf("%c", &

cin和scanf的速度差别

好长时间没有遇到这种问题了,以前虽然知道scanf比cin快,但是没想到快这么多,见图. 50万的数据. scanf输入: cin输入: 网上说用std::ios::sync_with_stdio(false);可以优化.优化完的速度: 还和纯scanf差好多.

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

cin是c++标准,scanf是在c中使用的 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 using namespace std; 6 7 int main() 8 { 9 /* 10 strlen包含在string.h头文件里,加上 11 #include <string.h> 12 #include <cstring> // C语言头文件为 string.h

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

http://blog.csdn.net/l2580258/article/details/51319387 void cin_read_nosync() { freopen("data.txt","r",stdin); std::ios::sync_with_stdio(false); for (int i=0;i<MAXN;i++) std::cin >> numbers[i]; }

scanf函数和cin的区别、类的数组、C++排序函数

给定n个字符串,将这n个字符串按照字典序进行排列,此处用排列函数是C++的库函数sort,产生如下两个疑问,望大佬解答 #include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; /* ********************************************** Q1:为什么定义类的数组,无法用sort函数排

加快cin的读入速度

加快cin的读入速度 虽然C++有cin函数,但看别人的程序,大多数人都用C的scanf来读入,其实是为了加快读写速度,难道C++还不如C吗!?其实cin效率之所以低,不是比C低级,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而且是C++为了兼容C而采取的保守措施. 先讲一个cin中的函数——tie,证明cin和scanf绑定是同一个的流. tie是将两个stream绑定的函数,空参数的话返回当前的输出流指针. 先码代码: #include <iostream> #include

什么时候,可以关闭cin和stdin的同步

一些情况下,我们为了保证cin的读取输出速度,会选择在代码开头添加这样一句代码 std::ios::sync_with_stdio(false); 它的功能就是关闭cin和stdin的同步.从而提高cin的速度.可以使cin比scanf更加快. 但是身为小白的我,第一次用的时候忽略了一个问题. 这句话的功能是取消cin和stdin的同步,也就是说如果你打代码里同时又cin,cout语句和scanf,prin语句,那么他们就不会同步了. 这意味着,即便你的输出是正确的,因为cin和stdin速度上

2017-1,福州第十九中学,信息学奥赛培训跟进表

(首先,请你收藏本页面) 联系教师:[email protected] 培训地点:十九中,一号楼,6层,第二机房 培训守则: 1.学员每次培训,均需携带如下物品:鞋套(禁止使用一次性鞋套).水笔.荧光记号笔.<奥赛一本通>(第四版). 2.定位就座,严肃学习纪律,严禁携带零食及饮料进入机房. 3.认真做好课前预习.课堂笔记.和课后复习作业的工作. 4.不迟到.不早退. 5.无故迟到.早退.缺课.不做作业--,次数较多的,自己回去跟家长说,不要再来浪费时间了. 6.所有的培训内容,以本页面的通知