for循环在一次迭代后离开

时间:2011-04-30 11:04:15

标签: 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平均时间

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 个答案:

答案 0 :(得分:5)

您只有一个全局变量i,它同时用于for循环(jobstatus内部和main内部)。因此,一旦在主循环中调用jobstatus(length);,变量的内容将会更改,然后循环终止(因为i随后设置为length)。

答案 1 :(得分:3)

您正在使用全局变量i。它是jobStatus内部的变化和main中的for循环。 尝试在main()

中使用local

答案 2 :(得分:1)

我同意霍华德,但我认为(工作)的大小是错误的。您应该编写类似(sizeof (jobs))/(sizeof (jobs[0]))的内容,或者使用count()函数。