Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序陷入困境,无法运行';我甚至都进不去_C_Gcc_Runtime Error - Fatal编程技术网

C程序陷入困境,无法运行';我甚至都进不去

C程序陷入困境,无法运行';我甚至都进不去,c,gcc,runtime-error,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() { pr

我为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);
  }
}
#包括
结构过程
{
int at;
国际电信;
int-wt;
int-tt;
int-rt;
char-pid[5];
}p[5];
int i,j;
int n=0;
void main()
{
printf(“阅读”);
文件*fp;
fp=fopen(“in1.txt”,“r”);
煤焦样品;
如果(fp!=NULL)
{
样本=getc(fp);
while(样本!=EOF);
{
如果(示例=='\n')
n++;
样本=getc(fp);
}
fseek(fp,0,0);
对于(i=0;it)
{
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等待时间=%d”,avgw/n);
printf(“\navg周转时间=%d”,avgt/n);
}
}

标准输出是行缓冲的。将“Reading”更改为“Reading\n”,您将看到它

那么您在这里有一个错误:

while (sample!=EOF);

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

标准输出是行缓冲的。将“Reading”更改为“Reading\n”,您将看到它

那么您在这里有一个错误:

while (sample!=EOF);

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

请在顶部,即
void main

int t =0;
int avgw=0;
int avgt=0;
并删除
之后

 while (sample!=EOF)

务必在顶部,即
void main

int t =0;
int avgw=0;
int avgt=0;
并删除
之后

 while (sample!=EOF)

知道了。但是为什么在那之后就不执行呢?谢谢!现在才找到!另外,
getc
返回一个int,而不是char。所以while循环永远不会与EOF进行比较,因为EOF通常被定义为一个大于255的整数常量。@Lundin:que?EOF保证为负值(ISO/IEC 9899:2011§7.21.1:“
EOF
[…]扩展为整数常量表达式,类型为
int
和负值”)。关于
getc()
返回一个
int
,您是对的,但是循环终止取决于纯
char
是有符号的还是无符号的。如果有符号,则字符代码0xFF(ÿ)将提前触发EOF;如果它是无符号的,那么就有一个无限循环,因为没有一个无符号字符值等于-1。明白了。但是为什么在那之后就不执行呢?谢谢!现在才找到!另外,
getc
返回一个int,而不是char。所以while循环永远不会与EOF进行比较,因为EOF通常被定义为一个大于255的整数常量。@Lundin:que?EOF保证为负值(ISO/IEC 9899:2011§7.21.1:“
EOF
[…]扩展为整数常量表达式,类型为
int
和负值”)。关于
getc()
返回一个
int
,您是对的,但是循环终止取决于纯
char
是有符号的还是无符号的。如果有符号,则字符代码0xFF(ÿ)将提前触发EOF;如果它是无符号的,则有一个无限循环,因为没有任何无符号字符值等于-1。它正在打印:读取FCFS 0的甘特图。您使用的编译器是什么?小注释:
p[5]
,然后让
i
0
运行到
n-1
,这可能超过
4
,将导致缓冲区溢出,任何有足够行的文件都会导致缓冲区溢出。请在发布之前缩进您的代码。它正在打印:读取FCFS 0的甘特图。您使用的编译器是什么?简短的评论:
p[5]
,然后让
i
0
运行到
n-1
,这可能超过
4
,将导致缓冲区溢出,任何具有足够行数的文件。请在发布前缩进代码。只有在使用反向编译器(不支持C99或更高版本)时才需要移动声明。只有在使用反向编译器(不支持C99或更高版本)时才需要移动声明。