C 模拟连续文件分配
我一直在努力解决这个问题: 用C编写源代码,在以下条件下模拟连续文件分配: 提示用户输入文件数 输入文件名 输入起始区块编号 输入文件占用的块数 条件是:(任何两个文件都不能有相同的块“如果用户输入的相同块在前一个文件中不存在,则提示用户块已在使用”) 守则:C 模拟连续文件分配,c,operating-system,C,Operating System,我一直在努力解决这个问题: 用C编写源代码,在以下条件下模拟连续文件分配: 提示用户输入文件数 输入文件名 输入起始区块编号 输入文件占用的块数 条件是:(任何两个文件都不能有相同的块“如果用户输入的相同块在前一个文件中不存在,则提示用户块已在使用”) 守则: #include<stdio.h> #include<conio.h> struct { char fname[10]; } f[10]; main() { int n,i,j,b[20],s
#include<stdio.h>
#include<conio.h>
struct
{
char fname[10];
} f[10];
main()
{
int n,i,j,b[20],sb[20],t[20],x,c[20][20];
printf("Enter no. of files: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter file %d name: ", i+1);
scanf("%s", f[i].fname);
printf("Enter no. of blocks occupied by file %s: ",f[i].fname);
scanf("%d",&b[i]);
printf("Enter the starting block of file %s: ",f[i].fname);
scanf("%d",&sb[i]);
t[i]=sb[i];
for(j=0;j<b[i];j++)
c[i][j]=sb[i]++;
}
printf("Filename\tStart block\tlength\n");
for(i=0;i<n;i++)
printf("%s\t %d \t%d\n",f[i].fname,t[i],b[i]);
printf("blocks occupiedate:\n");
for(i=0;i<n;i++)
{
printf("file name %s ",f[i].fname);
for(j=0;j<b[i];j++)
printf("\t%d",c[i][j]);
printf("\n");
}
}
#包括
#包括
结构
{
char-fname[10];
}f[10];
main()
{
int n,i,j,b[20],sb[20],t[20],x,c[20][20];
printf(“输入文件编号:”);
scanf(“%d”和“&n”);
对于(i=0;i来说,您的代码很难理解,部分原因是单字母变量名,但似乎您正在将第i个文件的起始块和长度存储在sb[i]和b[i]中
假设是这样,当输入第i个文件详细信息时,您需要检查它是否与以前的任何i-1文件重叠
// compare i'th file against all previous files, in turn.
overlap = false;
for (k=0; k<i-1; k++) {
if (sb[i] >= sb[k] && sb[i] < sb[k] + b[k]) {
// start of i'th file is inside k'th file
overlap = true;
break;
}
if (sb[i] + b[i] >= sb[k] && sb[i] + b[i] < sb[k] + b[k]) {
// end of i'th file is inside k'th file
overlap = true;
break;
}
}
// if overlap is true here, then reject the current file details
//依次将第i个文件与以前的所有文件进行比较。
重叠=假;
对于(k=0;k=sb[k]&&sb[i]=sb[k]&sb[i]+b[i]
我是在头顶上打出来的,所以你应该仔细检查,尤其是边缘条件(比如,我是否正确使用了小于或等于?)。正如所有最好的教科书中所说,验证是留给学生的一个练习
您还可以检查我是否理解问题的术语;-)
我看到了(在数组c[][]
中)可能是一种分配位图的尝试,这可能更符合“模拟文件系统”(没有文件系统将新文件创建与所有现有文件进行比较)的精神,所以可能我选错了树结构。如果是这样,您需要填写问题的更多详细信息。每次输入新文件时,您都会知道它从开始到开始占用块+长度-1;让我们称之为文件的“范围”。您的工作是跟踪到目前为止输入到您的程序中的所有文件的范围,并对照前面的所有文件检查每个文件。非常感谢您的帮助,但请您更简要地解释一下:(我很难找出我应该使用的“如果”条件。