好的,所以我有一个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);
}
}
答案 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
类型的数组,这是不可能的。您可能应该使用struct
和int
定义一个小的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])
。