【问题标题】:What does this error message for struct mean?这个 struct 的错误信息是什么意思?
【发布时间】:2021-06-20 14:15:47
【问题描述】:

我试着做一个小注册程序,把它分成一个header,一个包含注册函数定义和主代码的源代码。

但是,我收到以下错误消息: error: expected expression before 'struct'.

我做错了什么?请帮助我是初学者。这是我的主要代码。

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

int main()
{
   int choice;
   puts("Press 1 to register");
   scanf("%d", &choice);

   if(choice==1){
       registerUser(struct generalUser user);
}
}

这是我的标题代码。

struct generalUser{
    char fName[15];
    char lName[20];
    int id;
    int bDay;
    int bMonth;
    int bYear;
};

struct generalUser user;

void registerUser(struct generalUser user);

这是我定义函数的代码。

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

void registerUser(struct generalUser user){
    srand(time(NULL));

    puts("Insert name");
    scanf("%s", user.fName);

    puts("Insert last name");
    scanf("%s", user.lName);

    user.id=1 + rand()%9999;
    printf("You ID code is %d", &user.id);

    printf("Insert date of birth in the following format: dd/mm/yy");
    scanf("%d/%d/%d", &user.bDay, &user.bMonth, &user.bYear);


    printf("%s %s, id %d, %d/%d/%d", user.fName, user.lName, user.id, user.bDay, user.bMonth, user.bYear);
}

【问题讨论】:

  • 你最后的代码 sn-p 中没有#include "registration.h"。这是转录错误,还是在您的实际代码中?如果是后者,那就是问题所在。
  • 看看你是怎么打电话给printfscanfputs的,然后看看你是怎么打电话给registerUser的。注意到区别了吗?
  • @Adrian Mole 我修复了这个问题,但现在它说未定义对“registerUser”的引用。我什至将 registerUser(struct generalUser user) 更改为简单的 registerUser(user) 但新错误仍然存​​在。
  • 您可能只想在程序中调用srand一次。永远不要做scanf("%s", ...);,至少给%s 一个长度选项。将user参数传递给registerUser的目的是什么?
  • 哦,学习 C 时不要使用全局变量。全局变量有其用途,但它们往往会让初学者跳过学习参数的正确使用。

标签: c struct registration


【解决方案1】:

您的源代码中有两个错误:

  1. printf("You ID code is %d", &amp;user.id); : 请删除 & 因为你打印的是它的值而不是 ref
  2. 在主registerUser(struct generalUser user);,请删除struct generalUser。您正在调用一个已将用户声明为全局的函数。

【讨论】:

  • 但是,即使将user 作为参数传递也行不通。那就是传递全局变量的 copy。该函数将对该副本进行更改,并保持“原始”不变。或者,它可能在这种情况下有效,因为在调用函数后 OP 的代码对全局 user 没有任何作用......但是,你知道......
  • @Tiny Sonhh 我应用了这些修复,但出现了一个新错误:未定义对 registerUser 的引用
  • @Tiziano666 你如何编译和链接你的代码文件?
  • @Gerhardh 我正在使用 CodeBlocks,这是我第一次尝试将项目划分为多个文件(标题、源代码和主文件)。我将这三个文件放在同一个文件夹中。
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
相关资源
最近更新 更多