【发布时间】:2020-07-14 07:04:13
【问题描述】:
我是 C 新手。我正在尝试创建一个像这样的 addStudent() 函数:
我目前遇到两个问题:
- 无论我输入什么,对象的名称、中间和最终仍然是空的或为零。
- 如果我将
name参数更改为*name,它只需要第一个字符。即如果输入"James",则只取“J”。
更新:我一开始以为是scanf的问题,但是即使我删除它并初始化变量,对象std仍然是空的。我仍然想知道将参数传递给新对象的正确方法是什么,比如这个例子。
void addStudent(struct Student array[SIZE], int *currentSize){
char name[20];
int mid, final;
printf("Enter name: ");
scanf("%s", name);
printf("Enter midterm grade: ");
scanf("%d", &mid);
printf("Enter final grade: ");
scanf("%d", &final);
struct Student std = {*name, mid, final};
array[0] = std;
++*currentSize;
}
学生结构:
struct Student{
char name[20];
int midterm;
int final;
};
固定: 如果我直接将变量传递给scanf,一切正常。
void addStudent(struct Student array[], int *currentSize){
printf("Enter name: ");
scanf("%s", array[*currentSize].name);
printf("Enter midterm grade: ");
scanf("%d", &array[*currentSize].midterm);
printf("Enter final grade: ");
scanf("%d", &array[*currentSize].final);
++*currentSize;
}
【问题讨论】:
-
Student的定义在哪里? -
对不起。我忘了包含 Student 构造函数
-
除非您检查返回,否则您无法正确使用任何用户输入功能。尤其适用于
scanf系列函数。 -
您无法初始化
std = {name, mid, final},因为在访问时name被转换为指向第一个元素的指针。它不是字符串文字,也不再是数组。你需要struct Student std = {"", mid, final}; strcpy (std.name, name); -
非常感谢@David。这对我的代码非常有效。你能解释一下这些行对我的代码有什么作用吗?为什么它也适用于中期和决赛?如果我删除 strcpy (std.name, name),mid 和 final 将为零。
标签: c object parameter-passing scanf