我有一个struct person有以下元素,定义在data.h

typedef struct person{
    char firstName[20];
    char familyName[20];
    char telephoneNum[20];
    int type; // 0 = student / 1 = employee;
}newPerson;

我创建了一个person[MAX_PERSONS]数组,它在menu()函数中初始化。然后我有一个addFirstName(newPerson pers)函数。但是,当我尝试使用printFormat(newPerson pers)函数测试打印格式时,我得到的是空白,而不是输入的名称。
我在下面包含了menu()、addFirstname(newPerson pers)和printFormat(newPerson pers)函数。我想知道是否有人能告诉我这件事的原因。任何帮助或建议都将不胜感激。提前谢谢你。
int menu(){
    int num = 0;
    newPerson person[MAX_PERSONS];
    int option; // for user input for menu
    printf("\n\tPlease choose one of the following options to continue (0-9): ");
    scanf("%d", &option );
    printf("\n\tYou selected %d\n", option);

    if (option == 0){ //program will close
        printf("\tProgram will now close.\n");
        exit(1);
    }

    if (option == 1){ //program will ask for name input
        addRecord(person[num]);
        printFormat(person[num]);
        char choice[0];
        printf("\n\t\tWould you like to enter another record? (y/n): ");
        scanf("%s", choice);
        if (choice[0] == 'y'){
            num++;
            addRecord(person[num]);

        }
        if (choice[0] == 'n'){
            num++;
            mainMenu();
        }
            /*

            IF YES, THEN NUM++
            THEN RUN ADDRECORD(PERSONNUM) AGAIN.

            IF NO, THEN RETURN TO MAIN MENU.
            PRINTMENU
            THEN RUN MENU AGAIN
        */
    }

    printf("\n\tNot a valid option, please try again // THE END OF MENU FUNCTION\n");
    return 0;
}

void addFirstName(newPerson pers){
    char firstName[20];
    printf("\n\tEnter first Name: ");
    scanf("%20s", firstName);
    strcpy(pers.firstName, firstName);
    printf("\n\tThe name entered is %s", pers.firstName);
}


void printFormat(newPerson pers){
    printf("\t\tThe name is %s", pers.firstName);
}

最佳答案

这是因为通过值将结构传递给addFirstName意味着函数接收结构的副本。当然,更改一份副本不会更改原件。
虽然C不支持通过引用传递参数,但可以使用指针对其进行模拟。因此,更改addFirstName函数以接收指向结构的指针作为其参数。

08-17 05:45