我遇到了这个问题,我不知道为什么。我之前使用完全相同的循环来测试它(没有内部代码)并且它工作。我不是一个编程新手(虽然是新手),但现在我肯定感觉像一个。我用硬编码替换长度,不改变任何东西。 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
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 :(得分: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()函数。