对不起,如果我的问题不清楚,那么当涉及到c和指针等时,我的词汇量并不是很好。
我有一个简单的程序,它带有一个包含以下结构的标题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。然而,我使用的方法,当我尝试将其打印出来时,如果我改变&#34;%s&#34;它将返回null。到&#34;%p&#34;在printf中,它将返回nil。
使用相同的方法,我能够成功设置我的int type
,但我正在努力弄清楚如何将用户输入字符串附加到我的person.firstName元素中。
有人能指出我做错了什么吗?任何帮助将不胜感激,谢谢你提前!
答案 0 :(得分:0)
您已将firstName声明为包含20个指针的数组。我怀疑你想要一个20个字符的简单数组。删除该声明中的*(如familyName)。在对firstName的scanf调用中,只需传递缓冲区,所以再次删除&#34; *&#34;。