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.cbogon: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.cbogon: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