我用“cin”来读取输入流中的单词,就像
一样int main( ){
string word;
while (cin >> word){
//do sth on the input word
}
// perform some other operations
}
代码结构类似于上面的代码结构。它是可编译的。在执行期间,我继续输入类似
的内容aa bb cc dd
我的问题是如何结束此输入?换句话说,假设文本文件只是“aa bb cc dd”。但我不知道如何让程序知道文件结束。
答案 0 :(得分:18)
您的代码是正确的。如果您以交互方式输入,则需要发送EOF字符,例如CTRL-D。
在阅读文件时不需要此EOF字符。这是因为一旦你到达输入流的末尾,就没有任何东西可以“cin”了(因为流现在已经关闭),因此while循环退出。
答案 1 :(得分:5)
正如其他人已经回答了这个问题,我想补充一点:
由于Windows上的Ctrl-Z(以及unix系统上的Ctrl-D)会导致EOF到达,并且您从while
循环退出,但在while
循环之外您无法读取进一步的输入,因为已达到EOF。
因此,要再次使用cin
启用阅读,您需要清除eof
标志和所有其他失败标志,如下所示:
cin.clear();
完成此操作后,您可以再次使用cin
开始阅读输入!
答案 2 :(得分:3)
int main() {
string word;
while (cin >> word) {
// do something on the input word.
if (foo)
break;
}
// perform some other operations.
}
答案 3 :(得分:1)
按Ctrl-Z(* nix系统上的Ctrl-D)并按Enter键。这会发送一个EOF并使该流无效。
答案 4 :(得分:1)
cin >> some_variable_or_manipulator
将始终评估为cin
的引用。如果您想检查并查看是否还有更多输入需要阅读,您需要执行以下操作:
int main( ){
string word;
while (cin.good()){
cin >> word;
//do sth on the input word
}
// perform some other operations
}
这将检查流的goodbit,当没有设置eofbit,failbit或badbit时,该goodbit设置为true。如果读取错误,或者流收到EOF字符(从文件末尾或键盘上的用户按CTRL + D),cin.good()将返回false,并将您从循环。
答案 5 :(得分:0)
我想你想在文件末尾跳出来。 您可以获取basic_ios::eof的值,它在流的末尾返回true。
答案 6 :(得分:0)
从文件中获取输入。然后你会发现当你的程序停止输入时,while循环终止。
实际上cin
在找到EOF标记时停止输入。每个输入文件都以此EOF标记结束。当operator>>
遇到此EOF标记时,它将内部标记eofbit
的值修改为false,因此while循环停止。
答案 7 :(得分:0)
通过点击ENTER来帮助我终止循环。
int main() {
string word;
while(getline(cin,word) && s.compare("\0") != 0) {
//do sth on the input word
}
// perform some other operations
}
答案 8 :(得分:0)
您可以检查输入中的特殊单词。 F.E. “停止”:
int main( ){
string word;
while (cin >> word){
if(word == "stop")
break;
//do sth on the input word
}
// perform some other operations
}
答案 9 :(得分:0)
你可以试试这个
string word;
vector<string> words;
while (cin >> word) {
words.push_back(word);
if (cin.get() == '\n')
break;
}
这样,您就不必以 CTRL+D(Z) 结尾。程序将在句子结束时退出
答案 10 :(得分:-1)
你的程序不会占用计数空格。区分cin和getline ......
这里有一个技巧的示例:程序获取输入并打印输出,直到您点击两次Enter退出:
#include <iostream>
#include <string>
using namespace std;
int main(){
char c = '\0';
string word;
int nReturn = 0;
cout << "Hit Enter twice to quit\n\n";
while (cin.peek())
{
cin.get(c);
if(nReturn > 1)
break;
if('\n' == c)
nReturn++;
else
nReturn = 0;
word += c;
cout << word;
word = "";
}
cout << endl;
return 0;
}