我目前正在研究一个模拟各种CPU调度方法的程序。目前,我有要求输入的程序:
printf("Enter type of CPU scheduling algorithm (SJF, RR, PR_noPREMP, PR_withPREMP): ");
scanf("%s", typeOf);
printf("Enter number of processes: ");
scanf("%d", &numPro);
struct processStruct structs[numPro];
int burstTimes[numPro];
for (i = 0; i < numPro; i++) {
printf("Enter process number: ");
scanf("%d", &structs[i].pNum);
printf("Enter arrival time: ");
scanf("%d", &structs[i].arTime);
printf("Enter CPU burst time: ");
scanf("%d", &structs[i].cpuBur);
printf("Enter priority: ");
scanf("%d", &structs[i].prio);
}
除了两个变量typeOf(一个int)和numPro(一个char数组)之外,我还使用了数据结构。
这是保存各种参数的数据结构:
struct processStruct {
int pNum;
int arTime;
int cpuBur;
int prio;
int waitTim;
};
除了使用人工输入外,我还想使用一个文本文件,该文本文件具有与程序输入相同的信息。文本文件如下所示:
SJF
4
1 0 6 1
2 0 8 1
3 0 7 1
4 0 3 1
第一行是调度算法的名称。第二行是进程数。以下各行包含每个过程的信息。所以1 0 6 1 =进程= 1,0 =到达时间,6 = CPU突发时间,1 =优先级
不幸的是,我在C上使用文本文件输入的经验很少。有人对我如何将文本文件中的数据读入变量和数据结构有想法吗?
谢谢
编辑:我遇到的问题之一是每一行的数据都不相同。如果只是4个数字的行,那将是相对容易的。我需要程序将第一行读入char数组(字符串),第二行读入numPro变量,然后将后续行读入数据结构的多个实例(每个进程一个)。
fscanf()
由于第一行标识符以外的所有内容都是数字,因此可以相当简单地读取文件。但是您确实需要检查从文件读取的内容的有效性。我只是用exit(1)
错误进行说明,它可能比错误更复杂(例如,错误消息)。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
struct processStruct {
int pNum;
int arTime;
int cpuBur;
int prio;
int waitTim;
};
struct processStruct structs[MAX];
int main(int argc, char** args)
{
FILE *fil;
char typeOf[4];
int numPro, i;
if ((fil = fopen("myfile.txt", "rt")) == NULL)
exit(1);
if(fscanf(fil, "%4s", typeOf) != 1)
exit(1);
if(fscanf(fil, "%d", &numPro) != 1)
exit(1);
if(numPro > MAX)
exit(1);
for(i=0; i<numPro; i++) {
if(fscanf(fil, "%d%d%d%d", &structs[i].pNum, &structs[i].arTime,
&structs[i].cpuBur, &structs[i].prio) != 4)
exit(1);
}
fclose(fil);
// test the result
printf("Type: %s\n", typeOf);
printf("Num: %d\n", numPro);
for(i=0; i<numPro; i++) {
printf("%d %d %d %d\n", structs[i].pNum, structs[i].arTime,
structs[i].cpuBur, structs[i].prio);
}
return 0;
}
程序输出:
Type: SJF
Num: 4
1 0 6 1
2 0 8 1
3 0 7 1
4 0 3 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句