如何在循环中表示不再输入字符串ss(cin>> ss)

时间:2011-03-19 04:41:41

标签: c++ file-io cin eof

我用“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”。但我不知道如何让程序知道文件结束。

11 个答案:

答案 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;
}