while ( input >> s ) input是类ifstream的一个实例,这种写法对吗?求解析。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了while ( input >> s ) input是类ifstream的一个实例,这种写法对吗?求解析。相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include <string>
#include <vector>
#include <fstream>
#include <process.h>

using namespace std;

int main(void)

ifstream input;
vector<string>::const_iterator it = files.begin();
while ( it != files.end())

input.open( it->c_str() );
if ( !input )

cerr << " error: can not open input file:" << *it << endl;
input.clear();
++it; // 获取下一个文件

else

while ( input >> s )

process(s); //程序员自己定义的一个函数,并不一定是系统的函数,你可以使用编译器找一下这个函数的原型,看看是做什么用的。


input.close();
input.clear();
++it;



return 0;

楼上说的有歧义吧,iput>>s的返回值确实是input的引用,
但是io对象要求能转换为bool类型,对处于正常状态的io对象转成true,对处于错误状态的io对象转成false. 处于错误状态的io对象拒绝执行io操作,可用.clear()清除错误状态。
因此是可以这么做的。
参考技术A 写法不对,input>>s的返回值并不是表示输入是否成功的值,而是input的引用。这和cin是一样的。
例如cin>>a,返回cin的引用,所以可以继续用(cin>>a)>>b的写法,相当于cin>>a>>b,用起来很方便。但这样并不能判断是否输入成功。
用input.eof()来检查是否文件结束。本回答被提问者和网友采纳

请问高手,这个while(cin>>s)啥时候结束????

#include<iostream>
using namespace std;
int main()

char s;
while(cin>>s);
cout<<"over!"<<endl;
return 0;

我试过了,ctrl+D不行!请问还有其他的解释了没有?

一般测试样例是通过文件读入。。
当没有读到文件尾时 cin>>s 返回1,继续循环。
但读到文件尾时 cin>>s 返回0,结束循环。
参考技术A ctrl+D

~~~~~~~~~~~~~~~
忘了Windows下面是ctrl + Z

这个ctrl + D 或者是 ctrl + Z 是发送一个EOF,表示输入结束,这时候就会跳出while循环。
参考技术B 这个是不会停的
cin等的是键盘的输入值 当你输入了它才会去输入到内存 执行下一次等待撒
参考技术C linux: Ctrl + d
windows: Ctrl + z

以上是关于while ( input >> s ) input是类ifstream的一个实例,这种写法对吗?求解析。的主要内容,如果未能解决你的问题,请参考以下文章

二 while循环

while +for+字符串

If语句和while语句

请问高手,这个while(cin>>s)啥时候结束????

Uva 140 Bandwidth

flag跳出多层循环