#include
int n=0,time=0;
struct PCB {
char pname[5]; //进程名
int arrivalTime[5]; //进程提交时间
int pstart[5]; //进程开始运行时间
int pend[5]; //进程完成时间
int runningTime[5]; //进程运行所需时间
int turnaroundTime[5]; //进程周转时间
}*p;
void initial(){
int i;
printf("请输入进程数:");
scanf("%d\n",&n);
for(i=0;i printf("请输入进程名,提交时间,运行所需时间(用逗号分隔):");
scanf("%s,%d, %d\n",p->pname[i],p->arrivalTime[i],p->runningTime[i]);
}
}
void fcfs(){
int j;
for(j=0;j int i;
for(i=0;p->arrivalTime[i]>p->arrivalTime[i+1];i++);
printf("执行进程%c\n",&p->pname);
p->pend[i]=p->arrivalTime[i]+p->runningTime[i];
printf("进程%c结束时间:%d",&p->pend);
time=p->pend[i];
}
}
int main(){
initial();
fcfs();
}
你代码显示上有点问题,有些代码没显示出来,看不出来哪里有问题,你把代码插入代码片,这样看起来好看点
好象是函数 scanf 的问题,代码好乱,看不明白。。。
代码有点乱,不太能看清。感觉至少以下地方是有问题的:
1. struct 里面,char pname[5] 代表一个长度为5的字符数组,只能保存一个长度为4(因为要留一个\0)的字符串,这与楼主下面的代码意图不符。
2. scanf的格式实参应该是地址而不是变量名,而p->arrivalTime[i] 这种写法写出来是个int值,而不是该int值的地址
fcfs()太乱,没太看懂
用gdb在线单步调试,一步步查问题即可
for(i=0;i printf("请输入进程名,提交时间,运行所需时间(用逗号分隔):");
for语句后面不要跟分号,还有你的代码应该编译不了吧,感觉错误挺多的✧(≖ ◡ ≖✿)
后面的for循环没有终止条件吧,所以一直输入了
几个问题:
1.scanf里不要加\n
2.printf里不需要加上取地址符&
3.需要为指针p分配空间
4.pname应该设计成二维数组
PS:fcfs逻辑有点混乱,现在帮楼主把前面的调好了,有问题再发上来
#include <stdio.h>
#include <stdlib.h>
int n=0,time=0;
struct PCB {
char pname[5][5]; //进程名
int arrivalTime[5]; //进程提交时间
int pstart[5]; //进程开始运行时间
int pend[5]; //进程完成时间
int runningTime[5]; //进程运行所需时间
int turnaroundTime[5]; //进程周转时间
}*p;
void initial(){
int i;
printf("请输入进程数:");
scanf("%d",&n);
p = (struct PCB *)malloc(sizeof(struct PCB));
for(i=0;i<n;i++){
printf("请输入进程名,提交时间,运行所需时间(用逗号分隔):");
scanf("%s,%d,%d",p->pname[i],p->arrivalTime[i],p->runningTime[i]);
}
}
void fcfs(){
int j;
for(j=0;j<n;j++){
int i;
for(i=0;p->arrivalTime[i]>p->arrivalTime[i+1];i++);
printf("执行进程%s\n",p->pname[i]);
p->pend[i]=p->arrivalTime[i]+p->runningTime[i];
printf("进程%s结束时间:%d",p->pname[i], p->pend);
time=p->pend[i];
}
}
int main(){
initial();
fcfs();
}