脸滚键盘1201 2023-06-06 17:28 采纳率: 50%
浏览 40
已结题

C/C++ 字符串输出“烫烫..”

最后一次执行 strcpy_s 时莫名其妙字符串拷贝不过来,断点检查时就是“烫烫..”了

img


#include<stdio.h>
#include<string.h>

struct job {
    char name[10];      //作业的名字
    int starttime;      //作业到达系统时间
    int needtime;       //作业运行时间
    int endtime;        //作业结束时间   
    int runtime;        //作业周转时间

};
void strcopy(char *str1, char *str2) {
    char temp[10];
    strcpy_s(temp, strlen(str1) + 1, str1);
    strcpy_s(str1, strlen(str2) + 1, str2);
    strcpy_s(str2, strlen(temp) + 1, temp);
}
void sort(struct job jobs[50], int n);
void FCFS(struct job jobs[50], int n);
void SJF(struct job jobs[50], int n);
void result(struct job jobs[50], int n);
int main()
{
    struct job jobs[50];
    int n, i;

    printf("输入作业个数:");
    scanf_s("%d", &n);
    printf("输入每个作业的作业名,到达时间,服务时间:\n");
    for (i = 0; i < n; i++)
    {
        scanf_s("%s", jobs[i].name, 10);
        scanf_s("%d", &jobs[i].starttime);
        scanf_s("%d", &jobs[i].needtime);
    }
    printf("\n");
    printf("作业名\t到达系统时间\t运行时间\n");
    for (i = 0; i < n; i++)
    {
        printf("%s\t      %d\t         %d\n", jobs[i].name, jobs[i].starttime, jobs[i].needtime);
    }


    FCFS(jobs, n);
    printf("先来先服务(FCFS)算法运行结果:\n");
    result(jobs, n);


    SJF(jobs, n);
    printf("最短作业优先算法(SJF)运行结果:\n");
    result(jobs, n);

}
void FCFS(struct job jobs[50], int n)
{
    sort(jobs, n);
    int i;
    for (i = 0; i < n; i++)
    {
        if (i == 0) {
            jobs[i].runtime = jobs[i].needtime;
            jobs[i].endtime = jobs[i].starttime + jobs[i].needtime;
        }
        else if (jobs[i].starttime > jobs[i - 1].endtime) {
            jobs[i].runtime = jobs[i].needtime;
            jobs[i].endtime = jobs[i].starttime + jobs[i].needtime;
        }
        else {
            jobs[i].runtime = jobs[i].needtime + jobs[i - 1].endtime - jobs[i].starttime;
            jobs[i].endtime = jobs[i].starttime + jobs[i].runtime;
        }
    }
}



void SJF(struct job jobs[50], int n)
{
    int i = 0, j = 0, b = 1, sum = 0;
    char temp[10];
    int min;
    sort(jobs, n);

    jobs[0].endtime = jobs[0].starttime + jobs[0].needtime;
    jobs[0].runtime = jobs[0].needtime;

    while (b < n)
    {
        for (i = b; i < n; i++)
        {
            if (jobs[i].starttime <= jobs[j].endtime)
                sum = sum + 1;
        }


        for (i = b; i <= sum - 1; i++)
        {
            if (jobs[i].needtime > jobs[i + 1].needtime)
            {
                min = jobs[i].starttime;
                jobs[i].starttime = jobs[i + 1].starttime;
                jobs[i + 1].starttime = min;

                min = jobs[i].needtime;
                jobs[i].needtime = jobs[i + 1].needtime;
                jobs[i + 1].needtime = min;
                strcopy(jobs[i].name, jobs[i + 1].name);
            }
        }
        b = sum;
        j = b - 1;
    }


    for (i = 1; i < n; i++)
    {
        if (jobs[i].starttime > jobs[i - 1].endtime)
        {
            jobs[i].endtime = jobs[i].starttime + jobs[i].needtime;
            jobs[i].runtime = jobs[i].needtime;
        }
        else
        {
            jobs[i].endtime = jobs[i - 1].endtime + jobs[i].needtime;
            jobs[i].runtime = jobs[i].endtime - jobs[i].starttime;
        }
    }
}


void result(struct job jobs[50], int n)
{
    int i;
    int sum_runtime = 0;
    double  sum_dqzztime = 0.00;
    printf("作业名\t到达时间\t运行时间\t完成时间\t周转时间\n");
    for (i = 0; i < n; i++)
    {
        printf("%s\t     %d\t       %d\t       %d\t      %d\n", jobs[i].name, jobs[i].starttime, jobs[i].needtime, jobs[i].endtime, jobs[i].runtime);

        sum_runtime = sum_runtime + jobs[i].runtime;
    }
    printf("\n");
}

void sort(struct job jobs[50], int n)
{
    int i = 0, b = 0;
    char temp[10];
    int min;
    for (i = 0; i < n - 1; i++) //按作业到达系统时间进行排序,最早到达的排在最前面 
    {
        if (jobs[i].starttime > jobs[i + 1].starttime)
        {
            min = jobs[i].starttime;
            jobs[i].starttime = jobs[i + 1].starttime;
            jobs[i + 1].starttime = min;

            min = jobs[i].needtime;
            jobs[i].needtime = jobs[i + 1].needtime;
            jobs[i + 1].needtime = min;
            strcopy(jobs[i].name, jobs[i + 1].name);
        }
    }
}

  • 写回答

2条回答 默认 最新

  • 脸滚键盘1201 2023-06-06 18:01
    关注

    结束了,是SJF数组越界

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 6月6日

悬赏问题

  • ¥15 数据库原理及应用(相关搜索:数据类型)
  • ¥100 解决数据不连续出现问题
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误