我为FCFS调度编写了以下代码。
问题是这段代码编译得很好,但是在执行./a.out
之后,没有显示任何内容并且程序被卡住了。它甚至不会在"Reading"
开头打印printf
main()
语句。有什么问题?
#include <stdio.h>
struct process
{
int at;
int bt;
int wt;
int tt;
int rt;
char pid[5];
} p[5];
int i, j;
int n = 0;
void main()
{
printf("Reading");
FILE *fp;
fp = fopen("in1.txt", "r");
char sample;
if (fp != NULL )
{
sample = getc(fp);
while (sample != EOF);
{
if (sample == '\n')
n++;
sample = getc(fp);
}
fseek(fp, 0, 0);
for (i = 0; i < n; i++)
{
fscanf(fp, "%s %d %d", p[i].pid, &p[i].at, &p[i].bt);
p[i].wt = p[i].tt = 0;
p[i].rt = p[i].bt;
}
fclose(fp);
}
//sorta();
printf("\nGantt Chart for FCFS\n");
int t = 0;
int avgw = 0;
int avgt = 0;
printf("%d ", t);
for (i = 0; i < n; i++)
{
if (p[i].at > t)
{
printf("%d ", t);
t = p[i].at;
}
p[i].wt = t - p[i].at;
avgw = avgw + p[i].wt;
printf("%s ", p[i].pid);
p[i].tt = p[i].bt + p[i].wt;
avgt = avgt + p[i].tt;
t = t + p[i].bt;
printf("%d ", t);
printf("\navg waiting time = %d", avgw / n);
printf("\navg turn around time = %d", avgt / n);
}
}
答案 0 :(得分:8)
标准输出是行缓冲的。将“阅读”改为“阅读\ n”,你会看到它。
然后你在这里犯了一个错误:
while (sample!=EOF);
while循环的主体只是分号,而不是之后的块!如果条件为真,您的程序将陷入无限循环。
答案 1 :(得分:1)
请在顶部的i.c.e上写下以下的陈述。在void main
之后
int t =0;
int avgw=0;
int avgt=0;
并删除
之后的;
while (sample!=EOF)