2017-06-06 149 views
0

我需要为大学任务模拟一个硬盘。我有一个结构内的char数组,另一个结构有最后一个结构的数组等等。老师要求这样做。将char指定给一个struct中的char数组,这些结构在一个结构数组内部的结构数组里面,这个结构数组里面有一个结构数组,里面有一个结构数组,里面有一个struct array

typedef struct block { 
    unsigned char bytes_s[512]; 
} block; 

typedef struct sectror_array { 
    block sector[60]; 
} sectror_array; 

typedef struct track_array { 
    sectror_array track[5]; 
} track_array; 

所有这一切都在

track_array cylinder[10]; 

宣布为全球性的。

我的问题是,我似乎无法访问任何这些。在我的代码,我使用的是循环分配给“字节”变量,然后尝试打印

int c=0, t=0, s=0, b=0; 
    while(c<11){ 
    if(b==512){ 
     b=0; 
     s++; 
     if(s==60){ 
     s=0; 
     t++; 
     if(t==5){ 
      t=0; 
      c++; 
      if(c==10){ 
      return; 
      } 
     } 
     } 
    } 
    cylinder[c].track[t].sector[s].bytes_s[b]=0; 
    b++; 
    printf("%d %d %d %d, %c\n",c, t, s ,b, 
    cylinder[c].track[t].sector[s].bytes_s[b]); 

但它说明不了什么,甚至为我tryed分配“a”到每一个字节。

然而,它编译和运行没有崩溃。

以前从来没有这样的工作,我想出了如何解决这个问题的想法。

https://github.com/diceEviscerator/trabOA

代码my_drive.cpp

保存为CPP但纯C(保存为CPP运行GTEST需要)

+1

你能告诉我们你用来循环'j','t'和's'的'for()'语句(或其他)吗? –

+2

也许它不会进入循环,因为条件是错误的? – immibis

+0

也许你需要自己做一些调试工作。我保证这个问题与嵌套的数组结构无关。 – immibis

回答

2

while (cylinder[j].track[t].sector[s * 4].bytes_s[0] != 0) {

该方案刚刚获得不要简单地进入循环。

我试图通过使一个循环,将分配0到每一个字节

因此,“初始化”的结构,你描述这个样子的什么一个非常简化的版本?

int main (void) 
{ 
    int x = 0;   // Initialize to 0 

    while (x != 0) // While not 0, do some work 
    { 
     x = 1; 
    } 
} 

将问题分解为小部分,并以小增量对其进行编码,随时验证每个部分。 “Big Bang”编码一次增加了太多的复杂性,并使问题更难以找到。

+0

该循环不应该直接运行,因为程序以空磁盘开始,因此“找到第一个空循环”应该不会在输入的第一个文件上运行。所以代码是正确的。 – diceEviscerator

0

到目前为止,问题是我是特林一个我改变

cylinder[c].track[t].sector[s].bytes_s[b]=0; 
b++; 
printf("%d %d %d %d, %c\n",c, t, s ,b, cylinder[c].track[t].sector[s].bytes_s[b]); 

后打印的字符在那里应该是:

cylinder[c].track[t].sector[s].bytes_s[b]=0; 
printf("%d %d %d %d, %c\n",c, t, s ,b, cylinder[c].track[t].sector[s].bytes_s[b]); 
b++; 

仍有与此代码,但这个问题的问题似乎解决了。我发布时并不清楚,我希望我可以删除,因为它非常简单,因此没有新的知识,但我不能。