【问题标题】:Using getline and istringstream to read from file is producing zeroes使用 getline 和 istringstream 从文件中读取会产生零
【发布时间】:2012-02-17 01:20:54
【问题描述】:

我有一个如下所示的文本文件:

6
1 2 3 4 5 6
1 2
1 4
1 5
2 3
2 5
2 6
3 4
3 6
4 5
5 6

我使用以下内容将文件的行读入我的变量和数组:

//Read first line
if( std::getline(in, line))                                                                                                                                                                                                              
    {                                                                                                                                                                                                                                        
        std::istringstream iss(line);                                                                                                                                                                                                        
        while( iss >> a);                                                                                                                                                                                                           
    }                                                                                                                                                                                                                                        

    // read second line                                                                                                                                                                                                 
    int i = 0;                                                                                                                                                                                                                               
    if( std::getline(in, line) )                                                                                                                                                                                                             
    {                                                                                                                                                                                                                                        
        std::istringstream iss(line);                                                                                                                                                                                                        
        while( iss >> b[i] )                                                                                                                                                                                                          
        {                                                                                                                                                                                                                                    
            ++i;                                                                                                                                                                                                                             
        }                                                                                                                                                                                                                                    
    }                                                                                                                                                                                                                                        

    // read rest of file matrix                                                                                                                                                                               
    int x = 0;                                                                                                                                                                                                                               
    while( !in.eof())                                                                                                                                                                                                                        
    {                                                                                                                                                                                                                                        
        if( std::getline(in, line))                                                                                                                                                                                                          
        {                                                                                                                                                                                                                                    
            std::istringstream iss1(line);                                                                                                                                                                                                   
            while( iss1 >> c[x])                                                                                                                                                                                                         
            {                                                                                                                                                                                                                                
                ++x;                                                                                                                                                                                                                         
            }                                                                                                                                                                                                                                
        }                                                                                                                                                                                                                                    
    }     

在上面的代码中,a 是 int,bc 是 int 数组,in 是 istream 运算符,linestd::string。它似乎工作正常,但是当我 std::cout 变量和数组时,我得到以下信息:

6
1,2,3,4,5,6
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

由于某种原因,数组c 似乎填充了全零,而不是文件中的数据。这对我来说很奇怪,因为我以完全相同的方式阅读前两行,而且它们似乎读得很好。有什么想法吗?

【问题讨论】:

  • 如果将while(!in.eof()) 更改为while(in) 会发生什么?
  • @wilhelmtell 进行了您建议的更改,结果相同。
  • 为我工作...您的数据文件和代码是复制粘贴吗?
  • 您的阵列够大吗?如果不是,则in 流对象可能已损坏。此外,基本调试应该很快就会给你一个答案——即使是好的,旧的printf() 调试也会很快让你归零。

标签: c++ string file-io


【解决方案1】:

我终于想通了,我想我会把它贴在这里给未来的人。我最终实现了下面的功能并且它工作正常。

// declare the variables to be used
    int a, b, c, d, e;
    std::string line;

    // open file for reading
    in.open(file);

    in >> a;
    std::cout << a << '\n';

    for(int i=0; i<a; ++i)
        in >> b

    in >> c;

    for(int i = 0; i < c; ++i)
    {    
        in >> d >> e;

        // push to vector here
    }

    in.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2015-01-21
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多