【问题标题】:Returning structs in function c在函数 c 中返回结构
【发布时间】:2018-08-06 08:58:45
【问题描述】:

我正在尝试从函数返回 struct。 好像是这样的。。

struct read(struct returnera returnDuo, struct vara varuArray[]) { 
     char varunr[LISTNUMBER], varunamn[LISTNUMBER];
     FILE *varuLista;
     varuLista = fopen(returnDuo.filnamn, "r");
     if(varuLista!=NULL) {
         while(fscanf(varuLista,"%s\t%s\t%d\n",varunr, varunamn, 
                      &varuArray[returnDuo.antalVaror].lagerSaldo) == 3){ 
            strncpy(varuArray[returnDuo.antalVaror].varuNr,varunr,5);
            strncpy(varuArray[returnDuo.antalVaror].varuNamn,varunamn,30);
            returnDuo.antalVaror++;
        } 
        printf("Filen är laddad..\n"); 
        kommaVidare();
     }
     else {
        printf("Filen hittades inte, skapar en tom fil"); kommaVidare();
     }
     fclose(varuLista);
     return returnDuo;
 }

我正在尝试返回 returnDuo 结构中的内容,但我收到错误消息:“预期标识符或 '('”。如果我使用 void 函数,它会按预期工作而不会返回任何内容,但我不能弄清楚如何返回这个struct

这就是我设置结构的方式。

struct vara {
    char varuNr[5];
    char varuNamn[50];
    int lagerSaldo;
};

struct returnera {
    int antalVaror;
    char filnamn[LISTNUMBER];
};

以及我如何在 main 中设置它们。

struct vara varuArray[SIZE];

struct returnera returnDuo = {0,"0"};

我很乐意就如何让它发挥作用提出任何建议...

【问题讨论】:

  • struct read(...) -> struct returnera read(...)???
  • 请应用一些格式。然后你会注意到read() 的返回值只是struct。然后检查您是否还有问题。
  • 请学习并应用minimal reproducible example的概念。
  • 我不知道为什么,但我觉得代码是瑞典语很有趣:D 无意冒犯。
  • 瑞典代码让它变得更好^^

标签: c function struct return


【解决方案1】:

应该是

struct returnera read(struct returnera returnDuo, struct vara varuArray[])

不是

struct read(struct returnera returnDuo, struct vara varuArray[])

【讨论】:

    【解决方案2】:

    这是使用 typedef 的好例子。向结构声明 typedef 为结构类型提供了一个紧凑的单字名称。示例:

    #include "stdio.h"
    
    typedef struct Item_Struct {
        int val;
    } Item;
    
    Item Update( Item item, int val )
    {
        item.val = val;
        return item;
    }
    
    int main( int argc, char** argv )
    {
        Item item;
        printf( "Item -> %i\n", Update(item,4).val ); // Prints "Item -> 4"
        return 0;
    }
    

    请注意,在 C++(相对于 C)中,您可以简单地单独使用结构的名称:

    returnera read(returnera returnDuo, vara varuArray[])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多