2011-02-09 22 views
0

好吧,我有一个由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); 
    } 
    } 
+3

你是如何定义未知的?不是零? – 2011-02-09 21:35:21

+4

数组是保存相同类型元素的索引数据结构。为什么你的数组有`int`和`char`的组合? – Mahesh 2011-02-09 21:36:52

+0

未知值为-1 – foo 2011-02-09 21:40:27

回答

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])

1

这是不可能的int类型的阵列。你应该定义一个小的structintchar并做出一个数组。

struct values { 
    int value; 
    char variable; 
}; 

然后,如果你知道的value值或字母,如果你不这样做你会分配一个任意字符(比如' ')到variable

当使用这个,如果variable设置为' '(或任何你所定义的),然后再去读的value的值,否则处理为未知。

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; 

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

如果这不是你想要的,你可以很容易地进行修改。如果要存储符号引用而不是硬引用(例如,要将条目存储为“变量X”而不是“某个其他值的指针”),则可以添加另一个枚举常量和一个包含变量。

1

扩大对@ Argote的回答,干净的解决方案是使用的

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

阵列中的快速黑客通过-'z'作为变量使用的值-'a'。这只有在你的值总是非负时才有效。

0

如果你想要打印任何-1值的字母,那么你需要在输出例程中加入对这段代码的支持。