输入getline结束

时间:2012-11-23 18:02:17

标签: c++ input getline

  

可能重复:
  Why doesn’t getchar() recognise return as EOF in windows console?

我有一个简单的问题...让我说我想从标准输入读取行,只要有东西,但我不知道它会有多少行。例如,我正在上学,输入是

a
ababa
bb
cc
ba
bb
ca
cb

我不确切知道会有多少行,所以我试过

string *line = new string[100];
    int counter = 0;
   while(getline(cin,line[counter]))
   {
    counter++;
   }

但它不起作用...感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

如果您希望输入以空行结束,则必须对其进行测试。例如。

string *line = new string[100];
int counter = 0;
while (getline(cin, line[counter]) && line[counter].size() > 0)
{
    counter++;
}

恭喜正确使用getline() BTW。与你给出的一些答案不同。

答案 1 :(得分:1)

您可以使用以下内容获取行数:

   string *line = new string[SIZE];
   int lines = 0;

    while(lines < SIZE && getline(cin, line[lines]) && line[lines].size() > 0) 
   {
        cout << input_line << endl;
        lines++;
   }

不要忘记检查您是否没有添加比字符串行可以处理的更多,否则可能会出现Segmentation Fault。

答案 2 :(得分:1)

我能想到的最简单的行计数器就是这样的:

#include <string>
#include <iostream>

unsigned int count = 0;

for (std::string line; std::getline(std::cin, line); )
{
    ++count;
}

std::cout << "We read " << count << " lines.\n";

测试:

echo -e "Hello\nWorld\n" | ./prog

如果您想打空空行,请改为if (!line.empty()) { ++count; }

答案 3 :(得分:0)

您也可以使用文件结束标记。它的用法就是这样。

std::ifstream read ("file.txt") ;

while(!read.eof())
{
  //do all the work
}

如果已到达文件末尾,则此函数返回true。所以它会一直持续到你遇到它为止。

修改

正如评论中所提到的,方法eof可能是危险的,并没有提供所需的结果。所以没有任何保证,它会在每种情况下运行。 你可以看看这可能发生的时间。

Reading from text file until EOF repeats last line

答案 4 :(得分:0)

这应该有效:

int cont = 0;
string s;
while(cin >> s) { //while(getline(cin,s)) if needed
  if(s.empty()) break;
  ++cont;
}