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;

}

以上是 C程序在调试的过过程中显示无误,但在运行中结果出现错误,如图,我想是能输入四个进程,再按照运行时间排序,最后输出排序后的四个进程 的全部内容, 来源链接: utcz.com/p/195181.html

回到顶部