为什么输入流跳过-1值?

时间:2013-10-09 05:29:43

标签: c++ list file-io

所以我实现了一个基于数组的列表来存储一堆(x,y)对。这就是我所拥有的

list.h

#ifndef LIST
#define LIST
class list{
    float * values;
    int size,last;
public:
    float getValue(int);
    int getSize();

    void setValue(int,float);
    bool insert(const float);

    void resize(int);

    list();
    ~list();
};    
#endif

list.cpp

#include <iostream>
#include "list.h"

using namespace std;

int list::getSize()
{
    return size;
}
float list::getValue(int a)
{
    if (a<size && a >=0)
    return values[a];
}
void list::setValue(int a ,float b)
{
    if (a<size && a >=0)
        values[a]=b;
}   
bool list::insert(const float a)
{
    if (a==NULL || a==EOF){
        return false;
    }           
    if(last+1<size && last+1>=0)
    {
        values[last+1]=a;
        last++;
        return true;
    }
    else if (last+1>=size)
    {
        resize(size+1+((last+1)-size));
        values[last+1]=a;
        last++;
        return true;
    }
    return false;

}
void list::resize(int dim){
    float *temp=new float[size];

    for (int i=0;i<size;i++)
        temp[i]=values[i];

    delete [] values;
    values=new float [dim];

     for (int b=0;b<dim;b++)
     {
         if (b<size)
             values[b]=temp[b];
         else
             values[b]=NULL;
     }   
     size=dim;
     delete []temp;
}


list::list(){
    //The expected input is always >2000.
    values=new float[2000];
    size=2000;
    last=-1;
}
list::~list()
{
    delete[]values;
}

的main.cpp `

#include <fstream>
#include <iostream>
#include "list.h"
using namespace std;

int main()
{

ifstream file("test.txt");
list X,Y;
float x,y;
if (file)

    {
        while(file>>x)
        {
            X.insert(x);
            file>>y;
            Y.insert(y);
        }
    }
    ofstream outfile("out.txt");
    for(int i=0;i<X.getSize();i++)
        outfile<<i+1<<" "<<X.getValue(i)<<"  "<<Y.getValue(i)<<endl;

    system("notepad.exe out.txt");

    //system("pause");

    return 0;
}

输入流似乎跳过任何等于-1的值。我的问题是:是否有特殊原因要跳过-1? 另外:我知道我可以使用STL或更高效的列表,这只是为了练习。

1 个答案:

答案 0 :(得分:2)

对于most implementations

EOF-1,因此如果您的实施中出现这种情况,则if (a==NULL || a==EOF){会过滤-1