Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗Update the question所以堆栈溢出的值小于aa>。
三年前关闭。
我想写一个简单的c代码来创建一个花园结构,输入诸如动物数量、花园类型和花园大小等细节。
但是,我的代码给了我一些垃圾输出。
获取垃圾值是因为
而且,不是写作
你必须写信
这将读取指针
想改进这个问题吗Update the question所以堆栈溢出的值小于aa>。
三年前关闭。
我想写一个简单的c代码来创建一个花园结构,输入诸如动物数量、花园类型和花园大小等细节。
但是,我的代码给了我一些垃圾输出。
#include <stdio.h>
#include <string.h>
struct Garden
{
int num_animals;
int size;
char type[10];
};
void Input(struct Garden gardname)
{
printf("\nEnter number of animals\n");
scanf("%d",&gardname.num_animals);
printf("\nEnter size\n");
scanf("%d",&gardname.size);
printf("\nEnter type\n");
scanf("%s",gardname.type);
}
void Output(struct Garden gardname)
{
printf("Num of animals:%d\n",gardname.num_animals);
printf("size:%d\n",gardname.size);
printf("type:%s\n",gardname.type);
}
int main()
{
struct Garden Lumbini;
Input(Lumbini);
Output(Lumbini);
return 0;
}
最佳答案
默认情况下,您定义的函数使用传递参数的按值调用方法,这意味着尽管您有要读取和写入元素的Lumbini
结构,但您的函数将生成Lumbini
(在本例中为gardname
)的副本,并写入或打印该副本,而不是Lumbini
它可能导致重复的值我用call by reference编写了相同的程序(注意,指向structure的指针是函数中预期的参数,而lumbini
的引用是在调用时传递的)这样可以确保不存在重复项,并且只操作相关结构(在本例中为lumbini
)。
#include <stdio.h>
#include <string.h>
struct Garden
{
int num_animals;
int size;
char an_type[10];
};
void Input(struct Garden *gardname)
{
printf("\nEnter number of animals\n");
scanf("%d", &gardname->num_animals);
printf("\nEnter size\n");
scanf("%d", &gardname->size);
printf("\nEnter type\n");
scanf("%s", gardname->an_type);
}
void Output(struct Garden *gardname)
{
printf("Num of animals:%d\n",gardname->num_animals);
printf("size:%d\n",gardname->size);
printf("type:%s\n",gardname->an_type);
}
int main()
{
struct Garden Lumbini;
Input(&Lumbini);
Output(&Lumbini);
return 0;
}
获取垃圾值是因为
gardname
函数中的Output
是lumbini
结构的未初始化副本的局部变量当您打印出gardname
的值时,它们将是垃圾值,因为它们没有初始化当函数完成执行时,gardname
被销毁。而且,不是写作
scanf("%d",&gardname.num_animals)
你必须写信
scanf("%d", &gardname->num_animals)
这将读取指针
gardname
的地址加上结构中成员num_animals
的偏移量。关于c - 将结构传递给c中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40407851/
10-10 11:31