【问题标题】:Error : Expected expression before 'struct'错误:“结构”之前的预期表达式
【发布时间】:2021-01-13 10:22:48
【问题描述】:

我无法弄清楚我在这里做错了什么/我该如何解决它。它告诉我在第 90 行的 struct 之前需要一个表达式。有人可以帮我解决这个问题吗?

我想打印一个函数中的结构,但由于它背后的 2 个参数,我找不到合适的编码方式。其他功能确实可以正常工作,但是当我添加这个功能时,一切都出错了。

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

struct geboorteDatum
{
    int geboortedag;
    int geboortemaand;
    int geboortejaar;
};

struct Persoon
{
    struct geboorteDatum;
    char naam[20];
};

void    printPersonen(struct Persoon *pt, int persoonCount);
void    scanPersonen(int persoonCount);
int     startMenu(void);

int main()
{

startMenu();

}

void    printPersonen(struct Persoon *pt, int persoonCount)
{

    printf("Gegevens persoon 1 : ");


    printf("\n%s",pt[persoonCount].naam);
    printf("\n%d",pt[persoonCount].geboortedag);
    printf("\n%d",pt[persoonCount].geboortemaand);
    printf("\n%d",pt[persoonCount].geboortejaar);
    printf("\n");


}

void    scanPersonen(int persoonCount)
{

    struct Persoon pt[100];

    printf("Voer Gegevens persoon . : \n");

    scanf("%s", pt[persoonCount].naam);
    scanf("%d", &pt[persoonCount].geboortedag);
    scanf("%d", &pt[persoonCount].geboortemaand);
    scanf("%d", &pt[persoonCount].geboortejaar);

}

int     startMenu(void)
{

int keuze = 0;

int persoonCount = 0;
int * p1 = &persoonCount;

    do
    {

        printf("MENU \n");
        printf("1 : Voer een persoon in \n");
        printf("2 : Toon alle geboortedatums \n");
        printf("3 : Toon de jongste persoon \n");
        printf("4 : Toon verjaardagen in een maand \n");
        printf("0 : Einde \n\n");

        printf("Maak een keus : ");

        scanf("%d", &keuze);
        printf("\n");

            if(keuze == 1)
            {
                persoonCount++;
                scanPersonen(persoonCount);

            }

            else if(keuze == 2)
            {
                printPersonen(struct Persoon *pt, int persoonCount);
            }

            else if(keuze == 3)
            {
                printf("jo3");
            }

            else if(keuze == 4)
            {
                printf("%d",persoonCount);
            }

            else
            {
                printf("Deze keus is niet mogelijk, kies opnieuw \n\n");
                return startMenu();
            }

} while (keuze > 0);

return persoonCount;

}

【问题讨论】:

  • struct Persoon 没有名为 geboortedaggeboortemaandgeboortejaar 的成员。需要在Persoon中命名struct geboorteDatum类型的成员变量,然后使用。

标签: c pointers struct


【解决方案1】:

好吧,在:

struct Persoon
{
    struct geboorteDatum;
    char naam[20];
};

struct geboorteDatum 指定了一个类型,但没有成员名!你可以通过添加一个struct geboorteDatum d;来解决这个问题

然后在您的打印和扫描功能中替换

printf("\n%d",pt[persoonCount].geboortedag);

printf("\n%d",pt[persoonCount].d.geboortedag);

但更好的办法是将struct geboorteDatum 更改为

struct Date {
    int day;
    int month;
    int year;
}

因为生日只是一个日期。您不需要特殊类型来表示生日。

那么struct Persoon就变成了:

struct Person {
     struct Data birthday;
     char name[20];
};

打印语句变成了

printf("\n%d", pt[persoonCount].birthday.day);

(并将所有代码翻译成英文以便于分享。我可以理解荷兰语部分,但大多数人不能。)

【讨论】:

  • 感谢您的建议。真的很有帮助
【解决方案2】:

咳嗽

嗯....

 printPersonen(struct Persoon *pt, int persoonCount);

表示您正在声明一个原型,并且在这种情况下是不正确的。也许应该是:

 printPersonen(pt, persoonCount);

【讨论】:

  • 你应该指出不正确的地方。此声明不仅在代码中出现一次。
  • 对不起,如果我做错了,但代码的错误只在第 90 行(否则如果 (keuze == 2))。
  • @DanielLangr 好吧,看起来这个用户是学习语言的学生,因此,指出概念错误并让他做剩下的事情对他来说更具有教育意义,不是吗?但无论如何你是对的,作为一个分享的地方,我应该给予充分的回应。
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2014-04-20
相关资源
最近更新 更多