这是C中的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char street;
int number;
char postalcode;
} Person;
void print(Person p) {
printf("Street: %s\n", p.street);
printf("Number: %d\n", p.number);
printf("Postal code: %s\n", p.postalcode);
}
Person signUp() {
Person person;
printf("In which street do you live on?: \n");
scanf("%s", &person.street);
printf("What is your number?: \n");
scanf("%d", &person.number);
printf("what is your postal code?: \n");
scanf("%s", &person.postalcode);
return person;
}
int main(void) {
Person person;
person = signUp();
print(person);
return 0;
}
我尝试让“signUp”函数将用户输入返回给另一个名为“print”的函数,这样它就可以打印上一个函数的值。“signUp”函数工作得很好,但“print”函数永远不会启动。
1条答案
按热度按时间6tdlim6h1#
1.你用
%s
阅读字符串,但你的变量是一个字符(格式为字符串%c
)。1.当使用
scanf()
阅读字符串时,总是使用最大字段宽度。我在这里使用str()
宏来避免重复。注意:通常我们更喜欢使用sizeof()
,但是你需要sizeof(p->street)-1
,并且宏的求值顺序会妨碍你。1.通过值传入结构并通过值返回它们没有什么错,但是,这意味着副本,所以我们通常通过指针来传递这些。
我意识到
typedef
让你不必写struct Person
,但缺点是它将“Person”导入到与变量相同的名称空间中,所以你不能做Person Person
,而必须使用小写的person
。如果你需要和别人谈论你的代码,它会变得更加乏味“小写的人”或“个人大写的人”来区分。(双关语),我会使用一个简短的变量名来绕过它,即Person p
。我还发现snake大小写比camel大小写更容易阅读(
sign_up()
vssignUp()
),并且我发现命名空间规则更容易记住(常量是大写,rest是小写;使用camel case,它的方法以小写字母开始,然后大写字母,除了...等)。