You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组类型表达式赋值错误求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:00:38