我正在尝试检查C中的变量是否为空

时间:2016-03-29 17:40:52

标签: c

我有一个变量,它将存储-1,如果不是-1然后是1,但在我存储1之前我想检查NaN的变量。例如:

#include <stdio.h>

int main( void )
{
  int someVar;

  if (some condition)
     someVar = -1;
  else if((someVar == NaN) && (some other condition))
     someVar = 1;

  return 0;
}

如果true中没有存储任何内容,那么第一个条件是否会在else if语句中返回someVar

4 个答案:

答案 0 :(得分:3)

变量不能为“空”。它总是有价值。

您可以手动指定一个值,该值表示与字符串一样“空”:空字节(值为0)表示字符串的结尾。在这里,它本身并不是空虚,但你得到了我的意思,希望如此。

因为变量不能为空,所以没有常见的NaN值;每个值都是一个数字,所以NaN(不是数字)没有意义 浮点格式IEEE 754支持NaN值,但这是唯一可能的,因为浮点数的某些值已被指定为含义。

答案 1 :(得分:2)

变量驻留在RAM中。 RAM永远不会是空的。每个单元格都有一个值。程序员是否已知该值,取决于程序员是否已初始化该变量。

我知道两种方式来表示变量的“空虚”。一种是拥有一个意味着“空”的值,比如“0”,或者MAX_INTEGER,或者你喜欢什么。如果算法逻辑强制您的变量只包含某些值,那么这就有效,因此您可以知道该值何时有效。如果没有,您可以说变量无效或为空。

如果您的变量可以包含任何值(在您的类型的限制范围内),那么解决方案可能是使用一个小结构,如下所示:

typedef struct
{
  int value;
  int is_empty;
} tVar;

以这种方式声明变量i ......

tVar i;

您可以将其初始化为空,如下所示:

i.is_empty = 1;

所以,你的程序变成了:

int main( void )
{
  tVar someVar = {0,1};  // declaring and initializing it as empty

  ...
  ...
  ...    
  if (!someVar.is_empty) // if someVar is not empty...
  {
     someVar.value = -1;
     someVar.is_empty = 0; // is not empty any more
  }
  else if (someVar.is_empty && (some_other_condition))
  {
     someVar.value = 1;
     someVar.is_empty = 0;
  }

  return 0;
}

答案 2 :(得分:0)

你不能没有&#34;没有&#34;存储在变量中。每个变量都有价值。 在大多数情况下,会存储&#34; 0&#34;但在不常见的情况下,您的变量中会存储一些垃圾。它就是在你的变量把它放在记忆中之前就已经存在的东西了(那个垃圾就在那里)。

&#39; NaN&#39;你会遇到其他一些情况,例如除以零,等等。

答案 3 :(得分:0)

您始终拥有变量的值。如果你没有存储任何东西,它会存储一个通常称为“垃圾”的随机数,我们想避免它。因此,您无法检查变量是否为空,因为它永远不会。