【问题标题】:Name typedef directly from scanf直接从 scanf 命名 typedef
【发布时间】:2016-03-30 03:08:33
【问题描述】:

假设我有一个自定义类型

typedef struct {
    char code[3];
    int max_capacity;
    int state;
} Train;

我想使用 scanf 填充这些结构的数组以读取 3char 代码,问题是,我想直接使用 scanf 的输入命名“Train”类型,而不必像 A 在检索 scanf 值之前。

假设我输入了 TRI,例如我想将其命名为 TRI 以及 TRI.code = TRI

所以,避免这样的事情

void add_train(){
Train A
scanf(“%s”, &A.code)

并尝试直接命名

void add_train(){
Train scanfstring
scanf(“%s”, &scanfstring.code)

如果没有多次 scanf 调用或归因,最好的方法是什么?

【问题讨论】:

  • 不,你不能。如果变量名取决于用户的输入,您将如何引用它?这没有任何意义。此外,您的 char code[3]; 至少需要 4 个单元格。一个额外的用于空终止符。
  • 嗯?变量名必须在编译时已知(并且在运行时未知)
  • 我对 c 编程和一般编程非常陌生,所以我可能会遗漏一些明显的东西。那么我应该先使用占位符变量名,然后在从 scanf 获取值后将其复制到重命名的变量中吗?
  • 你所说的毫无意义。在编写程序时确定变量名称。

标签: c arrays scanf typedef


【解决方案1】:
Struct transporter {
   int max_capacity;  int state;  
};   


typedef struct transporter Train;

    Void add_train() {//assumed not parameterized
    Train TRI[3];
     int code =3;
    (int i=0; i<3; i++)
    scanf(“%d %d”, &TRI[i].max_cpacity, TRI[i].state);
}

//我把代码放在我从他的解释中理解的范围内,这太令人困惑了。 // 好的,这些块说你有一个运输器集合,你想从它继承一列火车。 Typedef 用于此目的,但我相信您甚至不需要将“运输者”转换为“训练”。 // 最后他把 Not parameterized function i didn't change;每次调用此函数时,您将创建三列火车,并且使用 for 循环您可以在同一行中为每列火车输入容量和状态

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多