2014-12-03 2 views
0

Я пишу приоритетный график абстракции, в котором я получаю количество процессов, а также их время выполнения и их приоритеты. Сначала запускается процесс с наивысшим приоритетом, затем следующий. Время выполнения добавляется как runtime1 + (runtime1 + runtime2) + ....Расчетная абстракция планирования времени

Он запускается без ошибок или предупреждений при его выполнении, но он получает только те значения, которые я запрашиваю и ничего не возвращаю. Что не так с моим кодом?

#include <stdio.h> 
#include <stdlib.h> 

typedef struct process { 
    int priority; 
    int runtime; 
} Process; 

int main() { 
    int numberOfProcess; 
    int i; 

    printf("enter process number\n"); 
    scanf("%d",&numberOfProcess); 
    Process proc[numberOfProcess]; 

    for (i = 0; i < numberOfProcess; i++) { 
    printf("Enter the process runtime\n"); 
    scanf("%d", &proc[i].runtime); 
    printf("Enter the priority\n"); 
    scanf("%d", &proc[i].priority); 
    } 

    int done = 1; 
    int index; 
    int completedtimes[10]; 
    int usage; 

    while (done > 0) { 
    done = -1; 
    int maxPriority = 0; 

    for (index = 0; index < numberOfProcess; index++) { 
     if (proc[index].priority > proc[maxPriority].priority) 
     maxPriority = index; 
     proc[maxPriority].priority = -1; 
     usage += proc[maxPriority].runtime; 
     completedtimes[maxPriority] = usage; 

     for (index = 0; index < numberOfProcess; i++) 
     if (proc[index].priority != -1) 
      done = -1; 
     for (index = 0; index < numberOfProcess; index++) 
     printf("process %d completed at %d sec", index, completedtimes[index]); 
    } 
    } 
    return 0; 
} 
+0

Разве вы уже не задавали этот вопрос? –

+0

Я сделал его более дружественным к формату, почему, хотя, это запрещено просить о помощи? – Morbidity

+0

И я также удалил старый. – Morbidity

ответ

1

У вас есть бесконечный цикл в первом для цикла на уровне контура 2, посмотрите на счетчик индекса и я

while(done>0) { 
     done=-1; 
     int maxPriority=0; 
     for(index=0;index<numberOfProcess;index++) { 
      if(proc[index].priority>proc[maxPriority].priority) 
       maxPriority=index; 
      proc[maxPriority].priority=-1; 
      usage+=proc[maxPriority].runtime; 
      completedtimes[maxPriority]=usage; 
      for(index=0;index<numberOfProcess;i++) 
       if(proc[index].priority!=-1) 
        done=-1; 
      for(index=0;index<numberOfProcess;index++) 
       printf("process %d completed at %d sec", index, completedtimes[index]); 
     } 
    } 

Btw. Это не сработает, как вы хотели, потому что используете и устанавливаете индекс в разных уровнях петли

+0

Во втором цикле я, по-видимому, использовал индекс в качестве счетчика и увеличил iI, что теперь, и теперь он дает содержимое последней функции printf, однако он говорит, что «процесс 1 завершен в 4180741412 секунд», что абсурдно, это то, что какое-то значение ascii ? – Morbidity

+1

Нет, это связано с тем, что использование переменной не инициализируется между объявлением и использованием. Замените ** использование int ** с ** int use = 0; **. – Joachim

Смежные вопросы