首页 > C程序在调试的过过程中显示无误,但在运行中结果出现错误,如图,我想是能输入四个进程,再按照运行时间排序,最后输出排序后的四个进程

C程序在调试的过过程中显示无误,但在运行中结果出现错误,如图,我想是能输入四个进程,再按照运行时间排序,最后输出排序后的四个进程

#include <stdio.h>
#define N 30
struct PCB
{
    char coursename;      //进程名称
    char status;          //进程当前状态
    int times;            //进程运行时间
};



/* 输入进程名称、进程当前状态、进程运行时间*/
void Input_pcb(PCB pcb[],int n)
{
    int i;
    printf("请输入进程的进程名称\t进程当前状态\t进程运行时间:\n");
    for(i=0; i<n; i++)
    {
        scanf("%c",&pcb[i].coursename);
        scanf("%c",&pcb[i].status);
        scanf("%d",&pcb[i].times);

    }
}

/* 对这些进程按照进程运行时间进行排序*/
void sort_pcb(PCB pcb[],int n)
{
   int i,j,temp;
   for(i=0;i<n-1;i++)
   {
       for(j=i+1;j<n;j++)
       {
           if(pcb[j].times>pcb[i].times)
           {
               temp = pcb[j].times;
               pcb[j].times = pcb[i].times;
               pcb[i].times = temp;
           }
       }
   }
}

/*输出按照短作业优先顺序的进程名称、进程状态、进程运行时间*/
void print_pcb(PCB pcb[], int n)
{
    int i;
    printf("输出进程:\n");
    for(i=0; i<n; i++)
    {
        printf("%c %c %d",pcb[i].coursename,pcb[i].status,pcb[i].times);

    }
}

int main()
{
    PCB pcb[N];
    int n;
    printf("请输入进程的个数:");
    scanf("%d",&n);
    Input_pcb(pcb , n);
    sort_pcb(pcb , n);
    print_pcb(pcb , n);
    return 0;
}


需要清空换行符。而且你scan用的格式导致你输入的时候会很麻烦,你上面截图里入参的格式也不对。

#include <stdio.h>
#define N 30
typedef struct PCB
{
    char coursename;      //进程名称
    char status;          //进程当前状态
    int times;            //进程运行时间
} PCB;



/* 输入进程名称、进程当前状态、进程运行时间*/
void Input_pcb(PCB pcb[],int n)
{
    int i;
    printf("Input:\n");
    for(i=0; i<n; i++)
    {
        scanf("%c",&pcb[i].coursename);
        getchar();
        scanf("%c",&pcb[i].status);
        getchar();
        scanf("%d",&pcb[i].times);
        getchar();
    }
}

/* 对这些进程按照进程运行时间进行排序*/
void sort_pcb(PCB pcb[],int n)
{
   int i,j,temp;
   for(i=0;i<n-1;i++)
   {
       for(j=i+1;j<n;j++)
       {
           if(pcb[j].times>pcb[i].times)
           {
               temp = pcb[j].times;
               pcb[j].times = pcb[i].times;
               pcb[i].times = temp;
           }
       }
   }
}

/*输出按照短作业优先顺序的进程名称、进程状态、进程运行时间*/
void print_pcb(PCB pcb[], int n)
{
    int i;
    printf("输出进程:\n");
    for(i=0; i<n; i++)
    {
        printf("%c %c %d\n",pcb[i].coursename,pcb[i].status,pcb[i].times);

    }
}

int main()
{
    PCB pcb[N];
    int n;
    printf("请输入进程的个数:");
    scanf("%d",&n);
    getchar();
    Input_pcb(pcb , n);
    sort_pcb(pcb , n);
    print_pcb(pcb , n);
    return 0;
}

运行

bogon:projs elta$ gcc a.c
bogon:projs elta$ ./a.out 
请输入进程的个数:4
Input:
a
r
5
b
r
2
c
r
3
d
r
9
输出进程:
a r 9
b r 5
c r 3
d r 2

运行结果看起来肯定不是你想要的,因为你排序算法的交换规则也写错了。应该改成:

/* 对这些进程按照进程运行时间进行排序*/
void sort_pcb(PCB pcb[],int n)
{
    int i,j;
    PCB temp;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(pcb[j].times>pcb[i].times)
            {
                temp = pcb[j];
                pcb[j] = pcb[i];
                pcb[i] = temp;
            }
        }
    }
}

这样结果就对了

bogon:projs elta$ gcc a.c
bogon:projs elta$ ./a.out 
请输入进程的个数:4
Input:
a
r
5
b
r
2
c
r
3
d
r
9
输出进程:
d r 9
a r 5
c r 3
b r 2

难道你是想这样?

   if(pcb[j].times>pcb[i].times)
   {
       temp = pcb[j];//注意temp的类型
       pcb[j] = pcb[i];
       pcb[i] = temp;
   }
【热门文章】
【热门文章】