3

我正在实现一个基本的 SJF 算法。这只是根据突发时间对进程进行排序,并同时对各个进程号进行排序。b[]是一个用于爆发的数组并p[]存储进程号。我在编译时收到以下错误:

sjf.c: In function ‘main’:
sjf.c:23:10: warning: comparison between pointer and integer [enabled by default]
sjf.c:25:10: warning: comparison between pointer and integer [enabled by default]
sjf.c:39:10: warning: comparison between pointer and integer [enabled by default]

不仅如此,在我在 Linux Mint 15 的终端中运行程序后,执行因“分段错误”而终止。以下是示例输出:

enter number of jobs2
Enter burst time12
21
Segmentation fault

我的代码如下:

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>

main()
{
    int k;
    int c;
    int b[100];
    int n[100];
    int a;
    int i;
    int j;

    printf("enter number of jobs");
    scanf("%d",&a);
    printf("Enter burst time");

    for(i=0;i<a;i++)
    {
        scanf("%d",&b[i]);
        n[i]=i;
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            if(b[j]>b[j+1])
            {
                k=b[j];
                b[j]=b[j+1];
                b[j+1]=k;

                c=n[j];
                n[j]=n[j+1];
                n[j+1]=n[j];
            }
        }
    }
    for(i=0;i<n;i++)
    {
        printf("burst time for process %d = %d ",n[i],b[i]);
    }
}

我该如何解决这个问题?

4

1 回答 1

0

n在您的代码中声明为数组int n[100];,在 for 循环条件中n应为a

for(i = 0; i < n; i++){
               ^ 
for(j = 0; j < n - 1; j++)
               ^ 
                both should be a

类似的错误出现在您打印的最后一个 for 循环中。

所以在编程命名约定很重要,缩进也很重要。

于 2013-10-10T19:09:33.163 回答