如何使用函数在struct中填充值?
我想调用一个函数来填充C中结构的值。我有下面的代码,但我在一些非结构或联合中遇到了类似[Error]请求成员“id”的错误 s是指针,而不是结构。这意味着你不能使用。在上面 相反,您必须编写*s.id解除引用,然后访问struct member或s->id相同但更短的内容如何使用函数在struct中填充值?,c,pointers,struct,C,Pointers,Struct,我想调用一个函数来填充C中结构的值。我有下面的代码,但我在一些非结构或联合中遇到了类似[Error]请求成员“id”的错误 s是指针,而不是结构。这意味着你不能使用。在上面 相反,您必须编写*s.id解除引用,然后访问struct member或s->id相同但更短的内容 另外,scanf%d使用一个指针,因此应该是&s->id等。我还发布了一个不使用指针的示例: #include <stdio.h> typedef struct { int id;
另外,scanf%d使用一个指针,因此应该是&s->id等。我还发布了一个不使用指针的示例:
#include <stdio.h>
typedef struct {
int id;
float grades[3];
} student_t;
student_t scan_student () {
student_t s;
printf("Please give patient's info:\n");
scanf("%d%f%f%f", &s.id, &s.grades[0], &s.grades[1], &s.grades[2]);
return s;
}
int main ()
{
student_t stu2;
stu2= scan_student();
printf("Student's info are:\n");
printf("%6d %5.2f %5.2f %5.2f\n", stu2.id, stu2.grades[0], stu2.grades[1], stu2.grades[2]);
return 0;
}
试试这个-&s,然后。。。这里应该有很多警告。规则说:警告是不能被忽略的,除非你明白为什么会出现警告以及为什么你可以在这种特殊情况下忽略它case@OldProgrammer-OP甚至还没犯那个错误!另一件事是。。。使用英语,如果你的听众真的不知道等级,至少使用英语。正如你在这里意识到的,这是一个全球性的世界。在像C这样的现代语言中,我想你甚至可以使用希腊标识符,当然这个web应用程序允许我编写希腊字符串-不要这样做。坚持使用7位ASCII、英文和80个字符的行,除非有令人信服的理由不这样做。@PeterA.Schneider是的,你完全正确!我很抱歉。我修正了文本。在您的示例中,将stu2作为参数传递给scan_student是毫无意义的。@FiddlingBits有一个很好的观点。您还可以返回一个局部变量注:按值!当然,将指针返回给本地人是错误的;无需将任何内容作为参数传递给函数。现在的方式意味着:1创建参数的本地副本注:这就是为什么您可以立即使用本地变量的原因;2.填写该表格;3返回堆栈上局部变量的临时副本;3将临时值复制回stu2,覆盖所有未初始化的值。哦,好吧。
#include <stdio.h>
typedef struct {
int id;
float grades[3];
} student_t;
student_t scan_student () {
student_t s;
printf("Please give patient's info:\n");
scanf("%d%f%f%f", &s.id, &s.grades[0], &s.grades[1], &s.grades[2]);
return s;
}
int main ()
{
student_t stu2;
stu2= scan_student();
printf("Student's info are:\n");
printf("%6d %5.2f %5.2f %5.2f\n", stu2.id, stu2.grades[0], stu2.grades[1], stu2.grades[2]);
return 0;
}