从文件中读取会增加额外空间

时间:2015-10-14 20:34:16

标签: c++

当我从文件中读取时,它会在最后添加一个空格。 所以之后,当我需要对字符串进行排序时,它也会对额外的空间进行排序。并添加到输出文件中。

int main()
{
    int siz=1000000;
    char a[siz];

    ifstream readfile("AllAlpha.txt");
    ofstream outfile("sorted.txt");

    if(!readfile)
    {
        cout << "An error occurred while opening the input data stream file \"AllAlpha.txt\"!" << endl;
        return 1;
    }
    // read file
    int i=0;
    while (!readfile.eof())
    {
        readfile.get(a[i]);
        i++;
    }
    int size=i;

    // sort the array
    //quicksort(a, 0, size-1);

    // output sorted array to file
    for (int num=0;num<size;num++)
    {
        outfile<<a[num];
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

使用:

readfile.get(a[i]);
i++;

您假设readfile.get(a[i])成功。读完文件的最后一个字符后,情况并非如此。

将您的循环更改为:

char c;
while (readfile.get(c))
{
   a[i] = c;
   ++i;
}

答案 1 :(得分:0)

这可能是为什么在while条件中使用readfile.eof ()几乎总是错误的一个完美示例:eof标志仅在实际读取文件末尾时设置。因此,在这种情况下,将读取文件末尾并将其分配给a[i],然后设置iostream::eof,然后程序执行才会继续while循环。