我得到第一个进程ID名称的奇怪输出,不知道为什么。也许我告诉它打印char数组的方式?
以下代码:
int main(){
int a; //variable used for: total number of processes
int i,j,k,l; //used for loops
int t1; //temporary variables
int burst[10],ttime[10],wait[10];
char process_name[10][11]; // array for storing up to 10 strings, with each up to length of 10 characters
char process_name_temp[10][11]; //temp variable for process name
float wait_time,wait_time_avg;
/*Pre-Fill burst and wait arrays with times of 0*/
for(i=0;i<10;i++){
burst[i]=0;
wait[i]=0;
}
wait_time_avg = 0; //set the wait time average to zero
printf("Please Enter Total Number of Processes Desired\n"); //
scanf("%d",&a); //get input from user:total number of processes
/*get user input from user: burst time for each process, process name for each process*/
for(i=0;i<a;i++){
printf("Please Enter Process Name(one word)\n");
scanf("%s", &process_name[i][11]);
printf("Please Enter Burst Time\n");
scanf("%d", &burst[i]);
}
for(i=0;i<a;i++){
for(j=1;j<a;j++){
if(burst[i]>burst[j]){
t1 = burst[i];
process_name_temp[i][11] = process_name[i][11];
burst[i] = burst[j];
process_name[i][11] = process_name[j][11];
burst[j] = t1;
process_name[j][11] = process_name_temp[j][11];
}
}
wait[0] = 0;
for(i=0;i<a;i++)
wait[i+1] = wait[i] + burst[i];
for(i=0;i<a;i++){
//ttime[i] = wait[i] + burst[i];
wait_time_avg = 0;
wait_time = 0;
wait_time_avg = wait_time_avg + wait[i];
}
wait_time_avg = wait_time_avg/a;
printf("\n\t Process ID \t Waiting Time \t Burst Time \n");
for(i=0;i<a;i++)
printf("\t %s \t\t %d \t\t\t %d \n\n", process_name[i],wait[i],burst[i]);
printf("Waiting Time Average: %f \n", wait_time_avg);
}
返回0;
}
如果有人能帮助我那会很棒。这可能是一个简单的解决方案 - 我错过或忽视的一点点。谢谢!
答案 0 :(得分:3)
在scanf("%s", &process_name[i][11]);
中。这会在process_name
数组结束后传递指向一个元素的指针。因此,scanf()
来电是错误的,应该是
scanf("%10s", process_name[i]);
因此,由于process_name
数组被错误地初始化,程序显示出未定义的行为。
您必须专门为scanf()
说明符检查"%d"
的返回值。如果不这样做,那么你也会因为读取未初始化的数据而调用未定义的行为。
在开始a < 10
循环之前,您应该检查for
。因此,在询问用户的项目数量后,请确保用户输入了合理/有效的内容。
在代码中的嵌套for循环中,您可以访问每个数组中最后一个元素之后的一个元素。索引从0
升级到N - 1
,因此访问x[N]
无法按预期工作。