цикл for оставленный после одной итерации - PullRequest
0 голосов
/ 30 апреля 2011

Я сталкиваюсь с этой проблемой и не понимаю почему. Я использовал точно такой же цикл, прежде чем тестировать его (без внутреннего кода), и он работал. Я не новичок в программировании (хотя c новичком), но теперь я определенно чувствую себя таковым. Я заменил длину жестко закодированным числом, ничего не меняет. jobStatus () также использует только цикл for, который работает нормально. Помощь приветствуется!

PS: Не возражайте против части if / else-if. Это был просто отчаянный шаг, потому что я не могу найти проблему, я знаю, что мне не нужно последнее, если и т.д.

заранее спасибо

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

short jobs[] = {6,13,7,3,4,9,10,11};
short table[13][10];
short Q,i,j,k,diff;
short sum;

void jobStatus(short a){
printf("Jobstatus:");
for(i=0;i<a;i++){
    printf(" %i",jobs[i]);
} printf("\n");
}

int main(){
// berechne Anzahl der Jobs
short length = sizeof(jobs)/2;
printf("Jobs: %i\n", length);

/* für alle Quanten Q
for(Q=0;Q<13;Q++){
    // schreibe das jeweilige Quantum in die erste Spalte jeder Zeile
    table[Q][0]=(Q+1);  
     gehe jeden Job durch*/

        for(i=0;i<length;i++){
            printf("Current Job: %i\n", i);
            /* falls der aktuelle job i bereits erledigt ist   überspringe ihn
            if(jobs[i]==0){
                i++;
            }*/
            diff=jobs[i]-(Q+1);
            if(diff>0){
                jobs[i]=diff;
                jobStatus(length);
                table[Q][i+1]=diff;
            } else if(diff==0){
                jobs[i]=0;
            } else if(diff<0){
                diff=diff*(-1);
                jobs[i]=0;
                table[Q][i+1]+=diff;
            }   
        }   

printf("#  Q P1 P2 P3 P4 P5 P6 P7 P8 Avg.Time\n");
printf("#------------------------------------\n");
for(Q=0;Q<13;Q++){
    for(i=0;i<8;i++){
        printf(" %i", table[Q][i]);     
    }
    printf("\n");
}
return 0;

}

Это вывод:

Задания: 8 // Указывает, что длина должна быть установлена ​​на 8

Jobstatus: 5 13 7 3 4 9 10 11

Q P1 P2 P3 P4 P5 P6 P7 P8 Avg.Time

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Ответы [ 3 ]

5 голосов
/ 30 апреля 2011

У вас есть только глобальная переменная i, которая используется как для циклов (внутри jobstatus, так и в вашем main). Таким образом, как только вы вызовете jobstatus(length); в вашем основном цикле, содержимое переменной будет изменено, и после этого цикл завершится (потому что i был тогда установлен в length).

3 голосов
/ 30 апреля 2011

Вы используете глобальную переменную i. Это изменения внутри jobStatus и цикл for в main. Попробуйте использовать локальный внутри main ()

1 голос
/ 30 апреля 2011

Я согласен с Говардом, но я думаю, что sizeof (рабочих мест) это неправильно.Вы должны написать что-то вроде (sizeof (jobs))/(sizeof (jobs[0])) или вместо этого использовать функцию count ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...