```c++
#include
#include
#include
#include
#define MAX 100
struct hrfs
{
char name[10];
float arrivetime;
float starttime;
float servicetime;
float finishtime;
int priority;
};
while(jarrivetime==p[j].arrivetime)
{
int j=1;
if(p[j].priority>p[i].priority)
{
max_priority=p[j].priority;
i=j;
}
j++;
}
k=i;
p[k].starttime=p[k].arrivetime;finishtime=p[k].starttime+p[k].servicetime;
p[k].run_flag=1;
temp_time=p[k].finishtime;
p[k].order=1;
temp_count=1;
while(temp_countmax_priority=0;
for(j=0;jmax_priority)
{
max_priority=p[j].priority;
k=j;
}
}
p[k].starttime=temp_time;
p[k].finishtime=p[k].starttime+p[k].servietime;
p[k].run_flag=1;
temp_time=p[k].finishtime;
temp_count++;
p[k].order=temp_count;
}
void input(hrfs *p,int N)
{
int i;
printf("\n请输入进程名 到达时间 运行时间 优先数,例如:a 0 100 1\n");
for(i=0;i"进程%d的信息:",i+1);
scanf("%s%f%f%d",p[i].name,&p[i].arrivetime,&p[i].servicetime,&p[i].priority);
p[i].starttime=0;
p[i].finishtime=0;
p[i].order=0;
p[i].run_flag=0;
}
}
void print(hrfs *p,float arrivetime,float servicetime,float starttime,int priority)
{
int i;
float turn_round_time=0,f1,w=0;
float right_turn_round_time;
printf("\n-------------------------------进程完成信息------------------------------------\n");
printf("进程名 优先级 达到时间 运行时间 开始时间 结束时间 周转时间 带权周转时间 运行次序\n");
for(i=0;if1=p[i].finishtime-p[i].arrivetime;
turn_round_time+=f1;
right_turn_round_time=f1/p[i].servietime;
w+=(f1/p[i].servicetime);
printf("%s %5d % % % % % % %8d\n",p[i].name,p[i].priority,p[i].arrivetime,p[i].servicetime,p[i].starttime,p[i].finishtime,f1,right_turn_round_time,p[i].order);
}
printf("平均周转时间=%\n",turn_round_time/count);
printf("平均带权周转时间=%\n",w/count);
}
报错
18 2 [Error] expected unqualified-id before 'while'
recipe for target 'main.o' failed
[Error] [main.o] Error 1
while循环有问题
struct hrfs {
char name[10];
float arrivetime;
float starttime;
float servicetime;
float finishtime;
int priority;
int run_flag;
int order;
};
int main() {
int count = 0;
hrfs p[MAX];
float temp_time = 0, max_priority = 0;
int temp_count = 0;
int i, j, k;
// input函数
printf("\n请输入进程名 到达时间 运行时间 优先数,例如:a 0 100 1\n");
while (count < MAX) {
printf("进程%d的信息:", count + 1);
if (scanf("%s%f%f%d", p[count].name, &p[count].arrivetime, &p[count].servicetime, &p[count].priority) != 4) {
break;
}
p[count].starttime = 0;
p[count].finishtime = 0;
p[count].order = 0;
p[count].run_flag = 0;
count++;
}
// 按到达时间从小到大排序
for (i = 0; i < count - 1; i++) {
for (j = i + 1; j < count; j++) {
if (p[i].arrivetime > p[j].arrivetime) {
hrfs temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// 执行调度算法
k = 0;
p[k].starttime = p[k].arrivetime;
p[k].finishtime = p[k].starttime + p[k].servicetime;
p[k].run_flag = 1;
p[k].order = 1;
temp_time = p[k].finishtime;
temp_count = 1;
while (temp_count < count) {
max_priority = 0;
for (j = 0; j < count; j++) {
if ((p[j].arrivetime <= temp_time) && (!p[j].run_flag) && (p[j].priority > max_priority)) {
max_priority = p[j].priority;
k = j;
}
}
p[k].starttime = temp_time;
p[k].finishtime = p[k].starttime + p[k].servicetime;
p[k].run_flag = 1;
temp_time = p[k].finishtime;
temp_count++;
p[k].order = temp_count;
}
// print函数
float turn_round_time = 0, w = 0;
printf("\n-------------------------------进程完成信息------------------------------------\n");
printf("进程名 优先级 达到时间 运行时间 开始时间 结束时间 周转时间 带权周转时间 运行次序\n");
for (i = 0; i < count; i++) {
float f1 = p[i].finishtime - p[i].arrivetime;
turn_round_time += f1;
float right_turn_round_time = f1 / p[i].servicetime;
w += (f1 / p[i].servicetime);
printf("%s %5d % % % % % % %8d\n",
p[i].name,p[i].priority,p[i].arrivetime,p[i].servicetime,p[i].starttime,p[i].finishtime,f1,right_turn_round_time,p[i].order);
}
printf("平均周转时间=%\n",turn_round_time/count);
printf("平均带权周转时间=%\n",w/count);
}