【问题标题】:union inside a struct结构内的联合
【发布时间】:2014-10-09 01:29:14
【问题描述】:

所以,我有这个代码:

 #include <stdio.h>
 #include <stdlib.h>

 struct lista{ 
    union info{
       double operando;
       char operador;
    }info;
 };

 typedef struct lista Lista;

 int main(){

 printf("char: ");
 scanf("%c", Lista.info.operador);
 getchar();
 printf("%c\n", Lista.info.operador);
 printf("double: ");
 scanf("%lf", Lista.info.operando);
 getchar();
 printf("%lf\n", Lista.info.operando);

 return 0;

 }

当我尝试编译它时,我得到了这个错误:

错误:“Lista”之前的预期表达式

有谁知道我做错了什么?

【问题讨论】:

  • 在任何特定的行上?
  • 在所有出现的行上:'Lista.info.operando' 或 'Lista.info.operador'
  • 主要问题是您定义了一个结构,然后定义了一个名为 Lista 的类型,但您实际上并没有在 main 中创建该类型的对象。您需要处理结构的一个实例。因此,在 main 中添加类似 Lista myLista; 的内容,并且 in main 将 Lista 的所有引用更改为 myListamyLista 是一个变量名,因此它可以是您选择的名称。
  • 另一个考虑因素是您没有正确使用 scanf。您需要传递字符变量(或双精度)的地址,而不是实际的字符或双精度。所以你应该做 scanf("%c", &amp;Lista.info.operador);scanf("%lf", &amp;myLista.info.operando); 。附带说明 %lf 是 gcc 格式扩展,不被认为是可移植的。
  • 现在只缺少 &。谢谢!!!

标签: c struct printf scanf unions


【解决方案1】:

Lista 是一个类型,不是一个变量,你需要这样做:

Lista xyzzy;
:
scanf ("%c", &(xyzzy.info.operador));

您还会注意到,因为 scanf 系列函数希望被赋予变量的地址,以便可以填充它们,所以我已将调用更改为使用 &amp;(xyzzy.info.operador)只是xyzzy.info.operador


而且,除非您需要使用结构名称,否则我倾向于只定义类型名称,例如:

typedef struct { 
    union {
        double operando;
        char operador;
    } info;
} Lista;

【讨论】:

  • 现在,我只收到 2 个警告:/home/rafael-linux/Documents/ED/union/main.c||In function ‘main’:| /home/rafael-linux/Documents/ED/union/main.c|16|警告:格式“%c”需要“char *”类型的参数,但参数 2 的类型为“int”[-Wformat=]| /home/rafael-linux/Documents/ED/union/main.c|20|警告:格式“%lf”需要“double *”类型的参数,但参数 2 的类型为“double”[-Wformat=]| ||=== 构建完成:0 个错误,2 个警告(0 分钟,0 秒)===|
  • 还有一个分段错误
  • @Rafael,那是因为您没有传递变量的地址。查看我的更新。
  • @RafaelDias 其他一些你会发现不足的东西。尝试为 char: 输入 2 个或更多字符。
  • 对于我的问题,我只会为 char 读取一个字符,但无论如何谢谢:)
【解决方案2】:

您从未声明过名为 Lista 的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多