本人写了个程序,尝试着用了下goto语句,碰到个问题
程序如下:
#define MAX 50 #include"head.h" #include<stdio.h> #include<stdlib.h>
void Stated() { int i,j,m,n,sum,t=0,t1,t2,k=65; char c; Dispe Area[MAX],temp[MAX],proceed[MAX]; printf("系统分区个数m:\n"); scanf("%d",&m); printf("初始数据:\n"); for(i=1;i<=m;i++) { printf("Area[%d]--size:",i); scanf("%d",&Area[i].size); printf("\n"); } printf("第一个分区的始址addr:"); scanf("%d",&Area[1].initaddr); for(i=2;i<=m;i++) Area[i].initaddr=Area[i-1].size+Area[i-1].initaddr; for(i=1;i<=m;i++) Area[i].mode='F'; printf("分区情况:\n"); printf("分区号 大小(KB) 始址(K) 状态\n"); for(i=1;i<=m;i++) printf("%d %d %d %c\n",i,Area[i].size,Area[i].initaddr,Area[i].mode); printf("(其中'T'表示已分配,'F'表示未分配)\n"); sum=1; loop: if(sum<=100) { printf("作业个数n:"); scanf("%d",&n); printf("\n作业大小:\n"); for(i=1;i<=n;i++) { printf("作业%c:",k++); scanf("%d",&proceed[i].size); printf("\n"); } k=65; for(i=1;i<=m;i++) { temp[i].size=Area[i].size; temp[i].index=i; } for(i=1;i<m;i++) for(j=1;j<=m-i;j++) if(temp[j].size>temp[j+1].size) { t1=temp[j].size; t2=temp[j].index; temp[j].size=temp[j+1].size; temp[j].index=temp[j+1].index; temp[j+1].size=t1; temp[j+1].index=t2; } printf("对分区大小进行排序:\n"); for(i=1;i<=m;i++) printf("%d (%d) ",temp[i].size,temp[i].index); printf("\n"); for(i=1;i<=n;i++) { j=1; while(j<=m) { if(proceed[i].size>temp[j].size) j++; else { if(Area[temp[j].index].mode=='F') { Area[temp[j].index].mode='T'; proceed[i].index=temp[j].index; j=m+1; } else j++; } } } printf("作业调度后内存分配情况:\n"); printf("分区号 大小(KB) 始址(K) 状态\n"); for(i=1;i<=m;i++) printf("%d %d %d %c\n",i,Area[i].size,Area[i].initaddr,Area[i].mode); printf("其中:\n"); k=65+t; t=n; for(i=1;i<=n;i++) printf("作业%c被分配在第%d个分区中;\n",k++,proceed[i].index); for(i=1;i<=m;i++) if(Area[i].mode=='T') Area[i].mode='F'; printf("还有其他作业吗?(有:121,无:除121以外的任何数字)\n"); scanf("%c",&c);//这样写程序根本就不让我输如字符,但要是改做scanf("%d",&c);就可以输入,这是怎么回事呢? if(c=='y') { sum++; goto loop; } else { sum=101; goto loop; } } }