将结果写入文件时无法过渡到新行
I can't make the transition to a new line when writing results to a file
我想我的问题很琐碎,但不幸的是(可能是因为我真的很累)我自己找不到解决方案。好吧,我的程序生成的结果我想写到文本文件的连续行中,因为我需要从它们创建一个图形。不幸的是,在我的情况下,每个结果都通过删除前一个结果保存在同一行中。你能帮我改进这个代码吗?非常感谢。
#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;
}
您需要使用std::ios::app
将数据附加到文件中。您还应在报告期间保持这些文件的打开状态;您似乎在为每次迭代重新打开它们。
相关文章:
- 使用新行和不使用新行读取文件
- 遇到新行时,有没有办法停止istream_iterator
- 如何将元素从向量转移到新数组?
- PangoLayout 中忽略的新行
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- 使用 clang 格式时,当行很大时,如何将右括号分成新行?
- C++流:保存到新行而不是覆盖旧行
- QML ListView将新行添加到模型中的子向量
- 使用getchar()获取字符并将其保存到每次C 的新行中的文件中
- 在SFML中超过窗口边界时,将光标发送到新行
- 将字符串中的每个单词输出到新行
- 将新行字符 () 添加到 CSV 文件中
- 如何跳到文件中的新行并重复循环
- QTableView 滚动到新添加的行
- 将结果写入文件时无法过渡到新行
- 如何检测新行并将其添加到字符串中.Fstream
- c++ peek()看不到新行字符
- 将文本光标移动到新行
- 在没有将光标移动到新行之前,在gotoxy(80,25)位置上写入字符
- 从文本中读取行,删除空白并保存到新文件