博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
标准输入的原理:cin与scanf
阅读量:6509 次
发布时间:2019-06-24

本文共 1012 字,大约阅读时间需要 3 分钟。

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.

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
idea演示
查看>>
Android第三十天
查看>>
告别暗黄皮肤变水嫩皮肤的8个小习惯
查看>>
加强Eclipse代码自动提示的方法
查看>>
【HM】第4课:MySQL入门
查看>>
GNS3-地址重叠环境中部署IPsec
查看>>
exchange online 用户疑问之许可证和用户数据归档
查看>>
QImage Mat IplImage 之间的相互转换
查看>>
lsof命令详解
查看>>
使用eclipse与android studio 在开发自定义控件时的区别
查看>>
我的友情链接
查看>>
mysql学习笔记
查看>>
django 问题解决
查看>>
年年有鱼游戏Android源码项目
查看>>
java使用Iterator、for循环同步数据
查看>>
创建镜像iso文件
查看>>
Linux下创建软RAID5和RAID10实战
查看>>
mariadb的日志
查看>>
C++类的存储
查看>>
2015 年最受欢迎的 7 个系统监控工具
查看>>