在C中循环函数

时间:2017-08-28 12:23:42

标签: c

我有一个学校项目,要求我使用这些变量来模拟先到先得:

用户输入:

处理数量:3

流程1到达0时间,需要5个'资源'

3
1,5,0
2,5,4
3,1,8

然而,我似乎无法超越前5个'资源'。我试图找出如何增加PID并重复,但保持所有这些资源的时间增加。我创建了这个相同的程序,但它只允许这个特定的输入,我试图让它更通用,所以我可以选择任何数量的流程和资源(单位)。

#include <stdio.h>

main() {
    int n;
    printf("Enter the Amount of processes: ");
    scanf("%d",&n);
    //Variables
    int process[n], unit[n], at[n];
    int i,time,PID = 1;
    int awt, atat,sum,counter;
    int x = n;

    //Takes and stores the users input into process unit and at
    for(i=0;i<n;i++)
    {
        scanf("%d,%d,%d", &process[i], &unit[i], &at[i]);

    }
    sum = sum_array(unit,n);
    printf("%d\n", sum);
    printf("FCFS\n");
    printf("Time PID");


    for(counter = 0; counter < x; counter++, PID++){
        FCFS(time,n,unit,PID);
    }

}
    int sum_array(int at[], int num_elements){
        int x, sum = 0;
        for(x=0; x<num_elements;x++){
            sum = sum + at[x];
        }
        return(sum);
    }
    int FCFS(int time,int n,int unit[], int PID){

        for(time = 0, n = 0 ; unit[n] >0  ;time++, unit[n]--){
            printf("\n%d     ", time);
            printf("%d", PID);

        }

        return;
    }

示例输出:

FCFS
TIME PID
0     1
1     1
2     1
3     1
4     1
5     2
6     2
7     2
8     2
9     2
10    3

2 个答案:

答案 0 :(得分:1)

您的问题主要与FCFS函数和您调用它的循环有关。

尝试以下方法:

  • 在主要功能
  • 中初始化time = 0
  • 在循环中将counter而不是n传递给FCFS
  • time
  • 返回更新后的FCFS
  • 不要重置time
  • 中的nFCFS参数

FCFS圈内呼叫for

time = FCFS(time, counter, unit, PID);

更新了FCFS代码:

int FCFS(int time,int n,int unit[], int PID)
{
    for( ; unit[n] >0  ;time++, unit[n]--)
    {
        printf("\n%d     ", time);
        printf("%d", PID);
    }
    return time;
}

除此之外,您的代码存在许多问题,但它并不适合这个Q / A全部提及,所以我坚持使用必要的东西让代码运行有效示例输入。

答案 1 :(得分:0)

由于这是一个家庭作业问题,我建议您自己解决。既然你已经付出了一些努力来解决这个问题,我将下面的答案作为扰流板发布(注意缩进在剧透版中不起作用)。然而,在看到答案之前,几乎没有建议来修复你的程序:

  • 如上所述,传递n绝对没有任何意义。请在FCFS函数中使用其他变量。
  • 无需递增并传递PID。由于您将它放在数组中,请尝试从数组中获取值。
  • 而不是ncounter传递给函数,以便您可以索引这两个数组。
  • FCFS内的for循环毫无意义。它应该是for(i=0; i<unit[counter]; i++)time可以在循环内增加。
  • time需要返回才能正常增加

我的代码:

int time = 0;
int cur_index = 0;
while (cur_index < n) {
    int pid = -1;
    if (at[cur_index] <= time) {
        pid = process[cur_index];
    } else {
        printf("%d %d\n", time, pid);
        time++;
        continue;
    }

    if (pid != -1) {
        int r = 0;
        for (r = 0; r < unit[cur_index]; r++) {
            printf("%d %d\n", time, pid);
            time++;
        }
    }
}