将结果写入文件时,我无法转换到新行

时间:2015-11-24 18:16:33

标签: c++ fstream

我想我的问题非常简单,但不幸的是(也许是因为我真的很累)我自己找不到解决方案。好吧,我的程序生成的结果我想写入文本文件的连续行,因为我需要从它们创建一个图形。不幸的是,在我的情况下,通过删除先前的结果,每个结果都保存在同一行中。你能帮我改进一下这段代码吗?谢谢。

#include <iostream>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <fstream>

using namespace std;

int fp(int x, int y)
{
    return (x<=y);
}

void sort_shell(int *tablica, int ilosc)
{
    int licznik=0;
    int h;
    int i;
    int temp;
    int c=1;
    fstream plik;
    for (h=1; h<=ilosc/9; h=ilosc/pow(2,h));
    c++;

    for(; h>0; h /= 3)
    {
        for (i=h; i<ilosc; i++)
        {
            int j;
            temp = tablica[i];
            for (j = i-h ; j>=0; j -=h)
            {
                if (temp <=tablica[j])
                {
                    tablica[j+h] = tablica[j];
                    licznik++;
                }
                else
                    break;
            }
            tablica[j+h] = temp;
        }
    }


    /*cout << "\nPo sortowaniu Shellem." << endl;
    for(i=0; i<ilosc; i++)
    {
        cout << tablica[i] << "\t";
    }*/
    plik.open( "shell.txt", std::ios::in | std::ios::out );
    if(plik.good() == true)
    {
        plik << licznik << "\n";

        plik.close();
    }

    //cout << "\nIlosc operacji :" << licznik << "\n";
}

void sort_hibbard(int x[], int n)
{
    int i, j,k, increment, temp,licznik=0;
    long swp=0, comp=0;
    int val;
    fstream plik;
    val=log(n+1)/log(2);
    increment =pow(2,val)-1;
    while (increment > 0)
    {
        for (i=0; i<increment; i++)
        {
            for(j=0; j<n; j+=increment)
            {
                temp=x[j];
                for(k=j-increment; k>=0&&temp<x[k]; k-=increment)
                {
                    comp++;
                    swp++;
                    x[k+increment]=x[k];
                    licznik++;
                }
                x[k+increment]=temp;
                swp++;
                licznik++;
            }
        }
        comp++;
        val--;
        if(increment!=1)
            increment=pow(2,val)-1;
        else
            increment = 0;
    }
    /*cout << "\nPo sortowaniu Hibbardem." << endl;
    for(i=0; i<n; i++)
    {
        cout << x[i] << "\t";
    }*/
    plik.open( "hibbard.txt", std::ios::in | std::ios::out );
    if(plik.good() == true)
    {
        plik << licznik << "\n";
        plik.close();
    }

    //cout << "\nIlosc operacji :" << licznik << "\n";
}


void sort_sedgewick(int *tablica, int ilosc)
{
    int h = 0, i, g, t, j;
    int c = 1;
    int licznik = 0;
    int temp;
    fstream plik;
    vector <int> tmp;
    tmp.push_back(h);
    do
    {
        h = (pow(4,c) + (3 * pow(2,c-1)) + 1); // funkcja z wikipedi O(N^4/3)
        tmp.push_back(h);
        if(h < ilosc) c++;
    }while(h < ilosc);
    for(g=ilosc/c;g>0;g/=c)
    {
        for(i=ilosc-g-1;i>=0;i--)
        {
            t = tablica[i];
            for(j=i+g;(j<ilosc)&&!fp(t,tablica[j]);j+=g)
            {
                tablica[j-g] = tablica[j];
                licznik++;
            }
            tablica[j-g] = t;
            licznik++;
        }
    }
    /*cout << "\nPo sortowaniu SEDGEWICKiem." << endl;
    for(i=0;i<ilosc;i++)
    {
        cout << tablica[i] << "\t";
    }*/
    plik.open( "sedgewick.txt", std::ios::in | std::ios::out );
    if(plik.good() == true)
    {
        plik << licznik << "\n";
        plik.close();
    }

    //cout << "\nIlosc operacji :" << licznik << "\n";
}

int main()
{
    int i, n;
    //cout << "Podaj rozmiar tablicy (W tablicy znajda sie liczby od 1 do 100): ";
    //cin >> n;
    for(n=1000;n<=100000;n+=1000)
    {
    cout << n << "\n";
    int zbior[n];
    int prawy = 200;
    srand(time(NULL));
    //cout << "Przed sortowaniem." << endl;
    for (int i = 0; i < n; i++)
    {
        if (i%2 == 0)
        {
            zbior[i] = rand()%prawy;
            //cout << zbior[i] << "\t";
        }
        else
        {
            zbior[i] = rand()%prawy+200;
            //cout << zbior[i] << "\t";
        }
    }
    cout << endl;
    sort_shell(zbior, n);
    sort_hibbard(zbior, n);
    sort_sedgewick(zbior, n);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您需要使用std::ios::app将数据附加到文件中。您还应该在报告期间保持这些文件的打开状态;你好像每次重复都要重新打开它们。