数组类型表达式赋值错误求助:C语言进程调度代码排查
进程调度代码中“assignment to expression with array type”错误排查与修复
错误原因
语句TAT+=WT[i] + BT[i];存在语法错误:在C语言中,数组名TAT代表数组首元素的内存地址,属于不可修改的左值,不能直接用+=运算符对其赋值。你实际需要的是给数组TAT的第i个元素赋值,必须明确指定下标[i]。
修正方法
将错误语句替换为:
TAT[i] = WT[i] + BT[i];
根据短作业优先调度的逻辑,单个进程的周转时间(TAT)就是其等待时间(WT)加上执行时间(BT),直接赋值即可,无需累加操作。
完整修正后的代码
#include<stdlib.h> #include<stdio.h> // 补充printf/scanf所需的头文件 int main() // 标准main函数声明格式 { int BT[15]={0}; int TAT[15]={0}; int WT[15]={0}; int P[15]={0}; int pos=0; int i=0; int n=0; int temp=0; int j=0; system("clear"); printf("\nEnter no.of processes:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("\nEnter P[%d] burst time:",i+1); scanf("%d",&BT[i]); P[i]=i+1; } // 短作业优先排序逻辑 for(i=0;i<n;i++) { pos=i; for(j=i+1;j<n;j++) { if(BT[j]<BT[pos]) pos=j; } temp=BT[i]; BT[i]=BT[pos]; BT[pos]=temp; temp=P[i]; P[i]=P[pos]; P[pos]=temp; } WT[0]=0; for(i=1;i<n;i++) { WT[i]=0; for(j=0;j<i;j++) WT[i]+=BT[j]; } printf("\nProcess \t BurstTime \t WT \t TAT\n"); for(i=0;i<n;i++) { TAT[i] = WT[i] + BT[i]; // 修正后的赋值语句 printf("\nP%d\t\t %d\t\t %d\t\t %d",P[i],BT[i],WT[i],TAT[i]); } return 0; // 标准main函数返回值 }
额外优化说明
- 补充了
<stdio.h>头文件:原代码缺少该头文件,printf和scanf会触发未定义行为; - 修正了
main函数的声明和返回值:符合C语言标准规范,提升代码可移植性。
内容的提问来源于stack exchange,提问作者jonathan pascal
相关产品推荐
相关产品推荐

