【发布时间】:2017-02-18 02:20:59
【问题描述】:
我正在尝试读入一个模拟 CPU 调度的文本文件,执行调度算法并打印输出。
即进程id号、到达时间、突发时间
1 0 3
2 4 6
...
如何根据扫描的行数分配要创建的结构的大小?我可以将 MAX 定义为扫描的行数吗?我能够扫描输入文件并输出文件,但是,我将结构的 MAX 变量定义为 10000。问题在于它会在文件中打印正确的输出,但会打印 0 0 0 到 10000输入行停止后的行。这是我的函数。
#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
【问题讨论】:
-
首先从
readtable返回i。并检查fscanf返回值:如果它是 != 3 那么你到达了文件末尾。 -
输出表格时,写的是实际读取的行数,而不是最大容量。
标签: c struct printf scheduling scanf