1
|
scanf ( "%d %d" ,&a,&b);
while(
scanf ( "%d %d" ,&a,&b)!=EOF); //acm中常用在读入未知数据 数多少时的情况
|
1
2
3
4
|
printf
(
"%d"
,
//输出为:baijia6
|
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