首页 > 代码库 > 标准输入的原理:cin与scanf
标准输入的原理:cin与scanf
1.cin 的处理方式
int a;
while(cin >> a){
cout << a <<endl;
}
return 0;
eg:1, 2, 3
1 23
1 a2
a 12
注意: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的处理方式
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。