Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的并集与范围变量_C_Struct_Pascal_Unions - Fatal编程技术网

C语言中的并集与范围变量

C语言中的并集与范围变量,c,struct,pascal,unions,C,Struct,Pascal,Unions,我有几个问题。 我需要使用union编写一个包含一个字段的结构,该字段要么为空,要么为某种特定类型。它是哪一个应该由bool变量的值决定(在本例中为inRoom)。这就是我所拥有的: typedef struct{}Unit; typedef struct{ Suspect currentPlayer; Dice dice; Bool inRoom; union{ Suggestion suggestion; Unit

我有几个问题。 我需要使用union编写一个包含一个字段的结构,该字段要么为空,要么为某种特定类型。它是哪一个应该由bool变量的值决定(在本例中为inRoom)。这就是我所拥有的:

typedef struct{}Unit;
typedef struct{
     Suspect currentPlayer;
     Dice dice;
     Bool inRoom;
     union{
         Suggestion suggestion;
         Unit suggestion; 
     }
 }Turn;
现在,我明白了程序员应该知道他应该使用哪种类型。 这是否意味着这不是我可以放在结构声明中的东西,而是放在程序本身中? 这是定义工会的正确方式吗

第二个问题: 在pascal中,我可以定义一个只包含一系列数字的变量

Dice=2..12;
如何将其转换为C语言?我可以使用枚举:

 typedef enum{2,3,4,5,6,7,8,9,10,11,12}

但这不会给我尝试做的任何算术带来问题吗?有没有更好的方法来定义C语言中的范围变量

对于第一个问题,实际的代码应该读取相应的bool,并解析相应的联合成员。请注意,这意味着您不能将联合的两个成员命名为同一名称,因为这样您就无法区分它们

因此,你应该改变:

     Suggestion suggestion;
     Unit suggestion; 
差不多

     Suggestion suggestion;
     Unit unit; 

我只使用int类型,注意值始终在2到12之间。在Pascal中,如果我没有记错的话,只要值超出范围,就会出现运行时错误。你没有任何范围检查,就像你没有任何数组边界检查一样。所以把它转换成C的最好方法是使用int,并加上必须检查输入的范围?(这不是课程的一部分,但更像是家庭作业中的一个理论问题)thanx。没想到