CPUスケジューリングをシミュレートし、スケジューリングアルゴリズムを実行し、出力をプリントアウトするテキストファイルを読み込もうとしています。テキストファイルからスキャンした行にstruct MAXサイズを定義する方法
すなわちプロセスID番号、到着時間、バースト時間構造体の大きさが走査線の量を使用して作成する
1 0 3
2 4 6
...
がどのように割り当てることができますか?スキャンするライン数をMAXと定義できますか?私は入力ファイルをスキャンしてファイルを出力することができますが、10000として定義された構造体のMAX変数を持っています。この問題はファイルに正しい出力を出力しますが、10000まで0 0 0を出力することです入力行の後の行は停止します。ここに私の機能があります。
#include<stdio.h>
#include<stdlib.h>
#define MAX 10000
typedef struct
{
int pid;
int arrTime;
int burTime;
int finTime;
int waitTime;
int turnTime;
}Process;
Process pTable[MAX];
void readTable(char *fileName, Process pTable[MAX])
{
int i;
FILE *fileIN = fopen(fileName, "r+");
while(!feof(fileIN))
{
fscanf(fileIN, "%d %d %d", &pTable[i].pid, &pTable[i].arrTime, &pTable[i].burTime);
i++;
}
fclose(fileIN);
}
void printTable(char *fileName, Process pTable[MAX])
{
FILE *fileOUT = fopen(fileName,"w+");
for(int i=0; i < MAX;i++)
{
fprintf(fileOUT, "%d %d %d\n",pTable[i].pid, pTable[i].arrTime, pTable[i].burTime);
}
}
int main(int argc, char **argv)
{
readTable(argv[1], pTable);
printTable(argv[2], pTable);
}
ここでは短縮入力ファイルの出力を示します。
1 0 3
2 4 6
3 9 3
4 12 8
5 13 11
6 18 19
7 19 2
8 23 4
9 28 1
10 31 3
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
脇:ここ
が十分な大きMAXを使用したソリューションである[なぜ常に間違っている「(!feofを(ファイル))しながら、」ある?]を参照してください(http://stackoverflow.com/質問/ 5431941/why-is-feof-file-always-wrong) –
は、 'readtable'から' i'を返すことから始まります。 'fscanf'の戻り値をチェックしてください:!= 3ならば、ファイルの終わりに達しました。 –
テーブルを出力するときは、最大容量ではなく、実際に読み取られた行数を書き込んでください。 –