可能重复:
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++;
}
但它不起作用...感谢您的帮助。
答案 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
可能是危险的,并没有提供所需的结果。所以没有任何保证,它会在每种情况下运行。
你可以看看这可能发生的时间。
答案 4 :(得分:0)
这应该有效:
int cont = 0;
string s;
while(cin >> s) { //while(getline(cin,s)) if needed
if(s.empty()) break;
++cont;
}