C程序卡住,甚至不进入主程序

标签 c gcc runtime-error

我为 FCFS 调度编写了以下代码。 问题是这段代码编译正常,但是执行./a.out后,什么也没有显示,程序卡住了。它甚至不打印 main() 开头的 "Reading" printf 语句。有什么问题?

#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);
  }
}

最佳答案

标准输出是行缓冲的。把“Reading”改成“Reading\n”,就可以看到了。

那你这里就错了:

while (sample!=EOF);

那个 while 循环的主体只是分号,而不是后面的 block !如果条件为真,您的程序将陷入无限循环。

关于C程序卡住,甚至不进入主程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358157/

相关文章:

c - 调试时出现错误 "Arithmetic exception"

c - fread 返回与 nmemb 相同的数字,但已到达文件末尾

c - 退出 Do While 循环

c - 奇怪的 GCC short int 转换警告

runtime-error - .NET 6 轻度负载下异步信号量错误

asp.net - 由于asp.net中对象的当前状态,因此操作无效。

c - 长字符串中的段错误

c - 在 C 中为加密目的生成伪随机数的最简单方法是什么?

c++ - G++ 找不到 boost 库。我说他们在众目睽睽之下

c - 为什么我可以用 GCC 制作的最小编译 exe 是 67KB?