您的位置:首页 > 编程语言 > C语言/C++

c/c++ cin>> cout<< scanf() printf() 返回值

2016-07-28 00:50 393 查看
1.scanf函数返回成功读入的数据项数,读到文件末尾出错时则返回EOF。

如:

函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;

如果只有a被成功读入,返回值为1;

如果a和b都未被成功读入,返回值为0;

如果遇到错误或遇到end of file,返回值为EOF

2.printf函数返回值是整型值,其值为printf实际控制输出的字符数。

例如:

3.cin 为iostream 类的一个对象,对象是无返回值的,>>为位运算符的重载,而>>操作符返回的是操作的流的引用,也就是istream&。

while (cin >> a >> b);

while里面判断的是bool值,不能判断istream&,打开<ISTREAM>头文件,找到类模板basic_istream的定义:

        typedef basic_istream<_E, _Tr> _Myt;          

        _Myt& operator>>(......) ......

说明cin >>的返回值类型就是basic_istream&,while()中要求是布尔表达式,难不成basic_istream&类型可以转换成bool类型?继续查看头文件,发现所有的operator重载函数都是<<和>>,没有找到用于类型转换的操作,追溯到父类basic_ios,打开头文件<ios.h>,找到ios中类型转换函数的定义:

operator void *() const{

 if(state&(badbit|failbit) )

return 0; 

return (void*)this;

}

编译器会在需要的情况下将ios类型自动转换为void*类型。因此,在表达式while (cin >> m >> n)中,括号中的表达式为了匹配bool类型将自动转换为void*类型。如果读入时发生错误返回0,否则返回cin的地址。

另附:windows 中键盘输入替代文件中EOF的是Ctrl+Z
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: