将数组中的未知值分配给变量

时间:2011-02-09 21:32:57

标签: c

好的,所以我有一个9个整数的数组。有些值是给定的,有些是未知的。如何为这些未知值分配一个整数变量,如'a' - 'z'?例如:

index [0] is unknown 
index [1] is 27 
index [2] is 6
index [3] is 9 
index [4] is unknown 
index [5] is 21 
index [6] is 24
index [7] is 3 
index [8] is unknown 

我想要

index [0] is a
index [1] is 27 
index [2] is 6
index [3] is 9 
index [4] is b
index [5] is 21 
index [6] is 24
index [7] is 3 
index [8] is c






  for (ii=0; ii<MAXLINE/2; ii++)
  {
    if (uniqueNumbers[ii] == UNKNOWN_INPUT)
    {

      printf("UNKOWN_INPUT at [%d]\n", ii);
    }
  }

5 个答案:

答案 0 :(得分:3)

这是一个很好的问题。实际上在C中没有直接的方法,因为类型系统虽然很弱,却强制为每个变量选择一个类型,这意味着如果没有一些额外的结构,你将无法使数组元素成为int或对变量的引用。

这样做的一种方法是让你的数组元素都是一个标记的联合,比如这个:

typedef struct {
    enum { Constant, Variable } type;
    union {
        int value; // If this is a constant
        int* ref;  // If this is a reference to a variable
    } value;
} Expression;

现在,您的数组元素可以是Constant(设置值字段)或Variable,在这种情况下,ref字段将是指向保存该值的实际变量的指针。

如果这不是您想要的,您可以轻松地进行修改。如果要存储符号引用而不是硬引用(例如,要存储条目是“变量X”而不是“指向某个其他值的指针”),您可以添加另一个枚举常量和一个包含该名称的字段变量

答案 1 :(得分:1)

对于int类型的数组,这是不可能的。您可能应该使用structint定义一个小的char并创建一个数组。

struct values {
    int value;
    char variable;
};

然后,如果您知道' '的值,或者如果您不知道字母,则将variable分配给value

使用此功能时,如果variable设置为' '(或您定义的任何内容),请继续阅读value的值,否则请将其作为未知处理。

答案 2 :(得分:1)

扩展@ Argote的答案,干净的解决方案是使用

数组
struct Value {
    union {
        char var;
        int  i;
    } v;
    bool value_known;
};

快速入侵是使用值-'a'-'z'作为变量。只有在您的值始终为非负值时才有效。

答案 3 :(得分:0)

如果您想要的是打印任何值为-1的字母,那么您需要将此代码的支持放入输出例程。

答案 4 :(得分:0)

由于您似乎没有使用负值(使用-1标记未知),您可以使用字符的负ASCII值来存储此信息。

index [0] is a (-97)
index [1] is 27 
index [2] is 6
index [3] is 9 
index [4] is b (-98)
index [5] is 21 
index [6] is 24
index [7] is 3 
index [8] is c (-99)

打印时使用(char)(-1 * index[i])