0

我有一个包含元素的 13x13 数组,但并非每个元素都是数字。如果它不是一个数字,那么它会充满空格,所以我试图弄清楚如何检查给定索引处是否存在一个数字。如果一个数字存在,它会做一个工作,如果不存在,它会返回循环。这就是我所拥有的:

    int *spaceCheck;  
    int i, Value;  
    for(i=0;i<169;i++){  
       spaceCheck = &Array[i];       
       if(!spaceCheck){  
          continue;
       else
          //do this job
    }

我可以这样做吗?有没有其他更好的检查方法?谢谢你的帮助。

它是一个由 169 个元素组成的整数数组。因此,当最初加载数据(数字)时,只有 80 个元素从文件加载到数组中。数组中的其余空间用空白空间(printf(" "))填充。对困惑感到抱歉。

4

3 回答 3

2

数组元素可能不会zero始终初始化。您需要做的第一件事是使用默认值对其进行初始化。说0-1或什么。然后你可以修改你的代码如下:

int *spaceCheck;  
int i, Value;  
for(i=0;i<169;i++){  
   spaceCheck = &Array[i];       
   if(*spaceCheck!=default_value){  
      continue;
   else
      //do this job
}

请注意,您还存储了数组元素的引用。如果要检查其数据,则需要使用dereferencing operator *. 希望这是你想要的。编写上述代码的更简单方法是根本不使用指针。如下:

int i, Value;  
for(i=0;i<169;i++){         
   if(Array[i]!=default_value){  
      continue;
   else
      //do this job
}
于 2013-06-20T04:15:11.317 回答
2

要执行您的要求,您需要使用指示“无价值”的哨兵值,例如:

const int novalue = -1; // or whatever you want, as long as it is unique
int Array[169];
for (i=0;i<169;i++)
    Array[i] = novalue;
...
for(i=0;i<169;i++){  
   Value = Array[i];       
   if(Value == novalue)
      continue;
   //do this job
}

否则,在结构而不是整数上创建一个数组:

struct sValue
{
    char valid;
    int value;
};
sValue Array[169];
for (i=0;i<169;i++)
    Array[i].valid = 0;
...
for(i=0;i<169;i++){        
   if(Array[i].valid == 0)
      continue;
   Value = Array[i].value;
   //do this job
}
于 2013-06-20T04:20:58.313 回答
0

我认为在此声明中:if(!spaceCheck)您正在检查变量的地址是否为真,并且您没有将其与任何值进行比较。例如,if((*spacecheck)!=Array[i][j])//considering you have a 2-D array)根据您的问题,在逻辑上将是正确的。下面的代码可能会清除您的概念,它基于类似于您在此处提供的条件,

int *spaceCheck;  
int i,j, Value;  
for(i=0;i<13;i++){  
for(j=0;j<13;j++){
spaceCheck=&array[i][j];//array is 2-D      
if(*spaceCheck!=array[i][j])  
continue;
else
//do this job
}}
于 2013-06-20T04:32:48.493 回答