【发布时间】:2018-05-20 20:55:27
【问题描述】:
我有这三个文件。使用结构、函数和指针。
尝试这样做:
void getName(Name *) - 接收指向名称的指针并执行操作
联系人.h
struct Name {
char firstName[31];
char middleInitial[7];
char lastName[36];
};
struct Contacts {
struct Name name;
struct Address address;
struct Numbers numbers;
};
void getName(struct Name*name);
联系人.c
#include <stdio.h>
#include "contacts.h"
void getName(struct Name*name)
{
char yorn;
printf("Please enter the contact's first name: ");
scanf("%s", name->firstName);
printf("Do you want to enter a middle initial(s)? (y or n): ");
scanf("%s", &yorn);
if (yorn == 'y'){
printf("Please enter the contact's middle initial(s): ");
scanf("%s", name->middleInitial);
}
printf("Please enter the contact's last name: ");
scanf("%s", name->lastName);
}
a1ms4.c
#include <stdio.h>
#include "contacts.h"
#include "contacts.c"
struct Name name;
getName(&contact.name);
我在 contacts.c 中收到以下错误:
错误:取消引用指向不完整类型结构名称的指针
scanf("%s", name->firstName);
^~
[编辑: 我将代码最小化为:
#include <stdio.h>
struct Name {
char firstName[31];
};
struct Contacts {
struct Name name;
};
void getName(Name*name);
int main(void)
{
struct Contacts contact;
getName(&contact.name);
return 0;
}
void getName(Name*name)
{
char yorn;
printf("Please enter the contact's first name: ");
scanf("%c", name->firstName);
printf("First name: %c\n", name.firstName);
return;
}
并得到这些错误:
1)。错误:未知类型名称âNameâ
void getName(Name*name);
2)。在函数âmainâ:
警告:函数âgetNameâ的隐式声明;你的意思是âgetlineâ? [-Wimplicit-function-declaration]
getName(&contact.name);
3)。顶层:
错误:未知类型名称âNameâ
void getName(Name*name)
【问题讨论】:
-
不要包含
*.c文件!曾经。直到您成为专业人士并确切地知道自己在做什么。 -
这是一个作业,他们希望我们包含所有三个文件
-
他们不可能问这样的事情。如果他们是 - 我会重新考虑在这个地方学习 C。
-
@SaM Eugene 是对的,永远不应该包含 c 文件。 c 文件应该被编译和链接(从这个意义上说,包含在你的输出可执行项目中)
-
您认为使用
scanf("%s"和char变量地址是个好主意吗?仔细阅读scanf的工作原理......
标签: c function pointers struct