我是一个完整的新手 . 当我运行程序并输入数据时,throw函数只能正确显示整数值但不显示字符 .
#include<stdio.h>
#include<string.h>
struct student_data{
char name[20],department[10];
int roll_num[0];
};
void collect(struct student_data data);
void throw(struct student_data student1);
int main(void){
struct student_data student1;
collect(student1);
throw(student1);
return 0;
}
void collect(struct student_data data1){
printf("Enter name:");
scanf(" %s",data1.name);
printf("Enter department:");
scanf(" %s",data1.department);
printf("Enter roll number:");
scanf(" %d",data1.roll_num);
}
void throw(struct student_data student1){
printf("%s\n",student1.name);
printf("%s\n",student1.department);
printf("%d\n",student1.roll_num[0]);
}
2 回答
为了在函数
collect()
中修改传递给它的数据,你需要传递对数据的引用,而不是数据本身 . 请参阅此accepted answer以了解如何执行此操作 . 因此,您将进行以下更改:使用
void collect(struct student_data *data)
而不是void collect(struct student_data data)
,而在main()
中,使用collect(&student1)
而不是collect(student1)
.你使用
roll_num
有点狡猾,所以我无视它 . 以下是代码相关部分的修改版本:您应该知道,在C编程语言中,参数是按值传递的 . 当您在main函数中创建结构的实例为
struct student_data student1;
然后将其传递给函数collect()
和throw()
时,您只需将其作为值传递,这意味着将在函数和函数中创建该实例的副本如果被销毁,副本也将被销毁,它永远不会影响您在main函数中创建的实例 . 要防止它,您需要使用指针 . 检查下面的代码;