C++ 遍历文件失败

C++ 遍历文件失败,c++,C++,我想遍历一个文件并打印所有字符串。例如,该文件包含: a 1 2 10 a1 1 b 将输出: a a1 b 我这样编写代码: int main(){ ifstream stream; stream.open("example.txt"); string temp; while (getline(stream, temp)){ cout<<temp<<endl; int n; while(stream>>n){}

我想遍历一个文件并打印所有字符串。例如,该文件包含:

a
1
2
10
a1
1
b
将输出:

a
a1
b
我这样编写代码:

int main(){
  ifstream stream;
  stream.open("example.txt");
  string temp;
  while (getline(stream, temp)){
    cout<<temp<<endl;
    int n;
    while(stream>>n){}
  }
}
intmain(){
ifstream;
stream.open(“example.txt”);
字符串温度;
while(getline(流、温度)){
这个怎么样

std::copy_if(std::istream_iterator<string>(stream), std::istream_iterator<string>(),
             std::ostream_iterator<string>(std::cout),
             [](std::string const& rhs) { return !std::isdigit(rhs[0]); })
std::copy_if(std::istream_迭代器(流),std::istream_迭代器(),
std::ostream_迭代器(std::cout),
[](std::string const&rhs){return!std::isdigit(rhs[0]);}

如果字符串不是空的,并且以字母开头,对吗

if (temp.size() > 0 && isalpha(temp[0]))
{
    cout << temp;
}
if(temp.size()>0&&isalpha(temp[0]))
{

cout发生的情况如下:一旦你的程序点击这一行

while(stream>>n){}
它尝试以
int
egers的形式从文件中读取以下标记。
1
成功。
2
成功。
10
成功。
a1
失败

stream
现在处于失败状态(
stream.fail()==true

while (getline(stream, temp)){
这将读取下一个标记(
a1
),但由于
处于失败状态,
getline
的结果将被解释为
false
,循环将被中断

这就是你的程序过早结束的原因。但是,它甚至不应该打印
a1
。实际上,它只在我的机器上打印
a

在吃掉循环中的整数标记后,需要清除失败状态。在末尾添加以下语句:

stream.clear();

这将重置失败状态(
stream.fail()==false
),外部循环将继续运行。

当(stream>>n){
@ildjarn我用它来迭代所有integery很好地提出的问题。我是编程新手。我认为我不允许使用类似的东西。到目前为止,我只知道getline用于读取字符串,stream>>n用于读取int@JessicaHerlian如果你使用cppreference.com来解决这个问题,那么你会学到很多比你的教授教你的还多!@JessicaHerlian很乐意解释任何你不能理解的事情。好吧。我会搜索那个网站。顺便说一句,教授?我还在十年级,我还是叫他老师:D@JessicaHerlian我们已经有很多大学生在这里复制和粘贴他们的练习;很高兴看到有人比我们年轻++.这是一种很棒的语言,它非常灵活,但也非常有表现力。