gpt4 book ai didi

c - 指向结构的字符串/元素时出现问题。厕所

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:34 25 4
gpt4 key购买 nike

抱歉,如果我的问题不清楚,我的词汇量在 c 和指针等方面不是很好。

我有一个简单的程序,它采用包含以下结构的 header data.h

#ifndef MENU_H_
#define MENU_H_

typedef struct student{
int gpa;
float tuitionFees;
int numCourses;
}student;

typedef struct employee{
float salary;
int serviceYears;
int level;
}employee;

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


#endif /* MENU_H_ */

我有一个 main.c,目前为止只包含这个

#include <stdio.h>
#include "menu.h"
#include "data.h"

main(){

//printMenu();
menu();
}

然后大部分代码都在这里,menu.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "menu.h"
#include "data.h"
#include "uni_personal.h"

int menu(){
int num = 0;
newPerson person[MAX_PERSONS];
int option;
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], &num);
printf("\n\tThe name is: %s", *person[num].firstName);
printf("\n\tThe number is suppose to be 99 if done right == %d\n", person[num].type);
}
}

void addRecord(newPerson *pers, int *num){
setStudent(pers, 0);
addName(pers, num);
}

void addName(newPerson *pers, int *num){
printf("\tEnter Name: ");
scanf("%20s", *pers->firstName);
}

void setStudent(newPerson *pers, int *num){
pers->type = 99; // Test number to see if pointed correctly
}

int changeNum(int *num){
*num = 50;
return *num;
}



void printMenu(){
printf("\n\n\n============================================================\n");
printf("\t STUDENT/EMPLOYEE RECORDS:\n");
printf("\t\t1. Add a new record\n");
printf("\t\t2. Print Student List\n");
printf("\t\t0. Quit\n");
}

基本上我想要一个函数,用于通过 scanf 询问用户姓名,然后使用输入的字符串,将其设为 person.firstName。但是我使用的方法,当我尝试打印它时它返回 null,如果我在 printf 中将“%s”更改为“%p”,它会返回 nil。

使用相同的方法,我能够成功设置我的 int type,但我正在努力弄清楚如何将用户输入的字符串附加到我的 person.firstName 元素中。

有人可以指出我在做什么是错的吗?任何帮助将不胜感激,提前致谢!

最佳答案

您已将 firstName 声明为一个包含 20 个指向 char 的指针的数组。我怀疑您想要一个包含 20 个字符的简单数组。将 * 放在该声明中(如 familyName)。在对 firstName 的 scanf 调用中,只传递缓冲区,因此再次删除“*”。

关于c - 指向结构的字符串/元素时出现问题。厕所,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com