#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "tempfile.h"
/* #include "writeinstance.h"*/
void tempfile(int m, int n, int t1,int t2, int k);
int writeinstance(int m,int n,int t1, int t2,int k);
int main(void)
{
int m = 20;int n = 200;int t1 = 1;int t2 = 100; int k = 100;
int a,b,c,d;
for (a = 1;a <= m;a++)
{
for (b = 10;b<=n;b+=10)
{
for (c = 10;c<=t2;c+=10)
{
tempfile(a,b,t1,c,k);
printf("meow");
}
}
}
for (a = 1;a <= m;a++)
{
for (b = 1;b<=n;b+=10)
{
for (c = 1;c<=t2;c+=10)
{
for (d =1;d<=k;d++)
{
writeinstance(a,b,t1,c,d);
printf("bark");
}
}
}
}
return 0;
}
void tempfile(int m, int n, int t1,int t2, int k)
{
FILE* tempfile;
char tempmatrix[100];
int rand(void);
void srand(unsigned int seed); /*set default value*/
sprintf(tempmatrix, "tempfile%d_%d_%d_%d.txt",m,n,t2,k);
tempfile = fopen(tempmatrix, "w");
int i = 0;
while(i<k) {
srand(time(NULL));
int j = 0;
for (j = 0; j < k; j++) {
int job[n][3];
int a,b;
fprintf(tempfile,"%d",m);
fprintf(tempfile, "\n");
fprintf(tempfile,"%d",n);
fprintf(tempfile,"\n");
for (a = 0 ; a < n ; a++) { /*generate random job time between t_min and t_max, to include both max value, it must add one(otherwise it will not include)*/
for (b = 0;b < 3 ; b++ ) {
job[a][b] = rand() % (t2 - t1 + 1) + t1;
fprintf(tempfile,"%d ",job[a][b]);
}
fprintf(tempfile,"\n");
}
i++;
}
}
fclose(tempfile);
return;
}
int writeinstance(int m,int n,int t1, int t2,int k) {
FILE *ptr_readfile;
FILE *ptr_writefile;
char line [128];
char tempfile[128];
char fileoutputname[1000];
int filecounter=1, linecounter=1;
sprintf(tempfile, "tempfile%d_%d_%d_%d.txt",m,n,t2,k);
ptr_readfile = fopen(tempfile,"r");
if (!ptr_readfile)
return 1;
sprintf(fileoutputname, "instance%d_%d_%d_%d_%d.txt",m,n,t1,t2,filecounter); /*m(num_machine) n(num_jobs) t1 t2 instance*/
ptr_writefile = fopen(fileoutputname, "w");
while (fgets(line, sizeof line, ptr_readfile)!=NULL && filecounter <= k ) {
if (linecounter == ((2+n)+1)) {
fclose(ptr_writefile);
linecounter = 1;
filecounter++;
sprintf(fileoutputname, "instance%d_%d_%d_%d_%d.txt",m,n,t1,t2,filecounter); /*m(num_machine) n(num_jobs) t1 t2 instance*/
ptr_writefile = fopen(fileoutputname, "w");
if (!ptr_writefile)
return 1;
}
fprintf(ptr_writefile,"%s", line);
linecounter++;
}
fclose(ptr_readfile);
return 0;
}
В основном я просто хочу создать m X n X t2 XK (20 * 200 * 100 * 100 = 400000) номеров текстового файла, и в каждом текстовом файле есть m (первая строка), n (вторая строка) и K матриц с размером 3 X n после нее.В функции tempfile я просто попытался напечатать все нужные мне числа в текстовом файле.В функции writeinstance он просто разбивает текстовый файл.Мой код работал хорошо, если целые числа m, n, t1, t2 и k малы.Тем не менее, если я просто увеличу эти числа, это просто выдаст мне ошибку сброса ядра (и не создаст все нужные мне текстовые файлы). Я понятия не имею, как решить эту проблему, может, мне стоит использовать tempfile?но если я использую tempfile, как определить его имя?Кто-нибудь может дать мне несколько советов?Спасибо!