C - 通过引用和值将结构参数传递给函数

时间:2018-04-12 10:28:10

标签: c function reference structure

我可以解释一下我做错了什么。该程序用于输入和显示学生的详细信息。它必须使用一个结构并具有2个功能;一个要捕获(通过引用传递)另一个要显示(通过值传递。

这是我的代码:

INSERT

我已经测试了很多次并且它正在运行,但我收到以下错误消息: Errors are shown for every argumety I've used

此外,当我完成其中一个案例 - “返回主菜单”时,是否有一种方法或一行代码可以用来返回开关的开头?

2 个答案:

答案 0 :(得分:2)

首先,当您调用两个函数 capture()和display()时,您尝试传递的变量(通过值或引用),无法在任何地方使用因为您在捕获或显示结果时直接与结构学生的成员打交道。

你得到语法错误的原因是因为capture()期望变量的地址(& name,& age,& address,& course)并且你传递变量(姓名,年龄,地址,课程)。你正在使用,

scanf ("%s", &aStudent[i].name);

而不是

scanf ("%s", aStudent[i].name);

在我看来,不是将Structure数组设为全局,而是在main函数中声明它并将整个结构数组作为引用传递给capture()并将值传递给display(),这对你的目标更好需要在代码中使用值和值引用。

我已经编辑了一些代码并添加了返回主菜单选项。它适用于我,如果我的答案很长很难理解,我会道歉,因为这是我在stackoverflow中的第一个答案。谢谢!

#include <stdio.h>

struct Students
{
    int ID;
    char name[50];
    int age;
    char address[100];
    char course[30];
};

void capture(struct Students *aStudent)
{
    int i;

    for(i=0; i<2; i++)
    {
        aStudent[i].ID = i+1;

        printf("\nFor Student number %d:\n",aStudent[i].ID);

        printf("Enter Student Name: ");
        scanf ("%s", aStudent[i].name);

        printf("Enter Student Age: ");
        scanf ("%d", &aStudent[i].age);

        printf("Enter Student Address: ");
        scanf ("%s", aStudent[i].address);

        printf("Enter Course: ");
        scanf ("%s", aStudent[i].course);
    }
}

void display(struct Students aStudent[])
{
    int i;

    for(i=0; i<2; i++)
    {
        printf("\nStudent %d:\n",aStudent[i].ID);
        printf("Name: %s\t\tAge: %d\t\tAddress: %s\t\tCourse: %s",aStudent[i].name, aStudent[i].age, aStudent[i].address,aStudent[i].course);

        printf("\n");
    }
}

void main()
{
    struct Students aStudent[2];
    int option;
    char choice = 'Y';

    printf("\t...Welcome to the Student Data System...\n\n");

    while(choice == 'Y' || choice == 'y')
    {
        printf("\nPlease Select An Option: \n1. Input Student Data\n2. View Student Data\n3. Exit Syatem\n\n");
        scanf("%d",&option);
        switch(option)
        {
        case 1:
            printf("Enter Student Details:\n");
            capture(aStudent);
            printf("Return to main menu? (Y/N) :");
            scanf(" %c",&choice);
            break;
        case 2:
            printf("\nDisplaying Information:\n");
            display(aStudent);
            printf("Return to main menu? (Y/N) :");
            scanf(" %c",&choice);
            break;
        case 3:
            close();
            break;
        default:
            printf("\nSorry, your option is not valid.");
        }

    }

}

答案 1 :(得分:-1)

您尚未初始化字符串,而是初始化了一个字符! char name, address, course;如果您使用了'char * name,* address,* course;'或者char name[100], address[100], course[100];你可能得到了答案!如果您使用上述情况,则应使用scanf("%s",name);进行扫描!希望我回答你的问题!