首页 文章

如何使用函数中的struct变量从用户读取数据

提问于
浏览
0

我是一个完整的新手 . 当我运行程序并输入数据时,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 回答

  • 0

    为了在函数 collect() 中修改传递给它的数据,你需要传递对数据的引用,而不是数据本身 . 请参阅此accepted answer以了解如何执行此操作 . 因此,您将进行以下更改:

    使用 void collect(struct student_data *data) 而不是 void collect(struct student_data data) ,而在 main() 中,使用 collect(&student1) 而不是 collect(student1) .

    你使用 roll_num 有点狡猾,所以我无视它 . 以下是代码相关部分的修改版本:

    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);
    }
    
  • 0

    您应该知道,在C编程语言中,参数是按值传递的 . 当您在main函数中创建结构的实例为 struct student_data student1; 然后将其传递给函数 collect()throw() 时,您只需将其作为值传递,这意味着将在函数和函数中创建该实例的副本如果被销毁,副本也将被销毁,它永远不会影响您在main函数中创建的实例 . 要防止它,您需要使用指针 . 检查下面的代码;

    #include<stdio.h>
    #include<string.h>
    
    struct student_data{
        char name[20],department[10];
        int roll_num;
    };
    
    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);
    
    
    }
    

相关问题