再一次,我要感谢大家对我上一次的升级书问题做出了迅速的回答。我现在在这个项目中走得更远,遇到了一个(在我看来)更棘手的问题。
指令要求我用这个原型创建一个函数:
int set_assignment_score(Gradebook *gb, char name[MAX_NAME_LEN], char a_name[], int score);再次,它将通过*gb指针进入Gradebook结构,但这一次,它的目的是访问分数数组:
int scores[MAX_NUMBER_OF_STUDENTS][MAX_NUMBER_OF_ASSIGNMENTS]..。并将“得分”整数存放在特定的单元格中,以供进一步使用。两个Char参数很重要,因为稍后我需要从分数数组中检索每个特定的整数,并在print_gradebook函数中匹配它的精确名称和a_name。
我很想分享我到目前为止拥有的代码,但事实是,我几乎不知道从哪里开始。但是,我认为关键是知道如何使用char名称和char a_name来导航整数数组,而不是通常的i和j。
欢迎任何建议、建议、嘲弄或要求澄清。请。
下面是梯度书的结构:
typedef struct gradebook {
int number_of_students;
Students students[MAX_NUMBER_OF_STUDENTS];
int number_of_assignments;
char assignment_names[MAX_NUMBER_OF_ASSIGNMENTS][MAX_NAME_LEN + 1];
int scores[MAX_NUMBER_OF_STUDENTS][MAX_NUMBER_OF_ASSIGNMENTS];
} Gradebook;编辑:谢谢大家!结合你的建议,我想出了如下结论:
int set_assignment_score(Gradebook *gb, const char name[MAX_NAME_LEN], const char a_name[], int score) {
int i, j;
for(i=0; i< MAX_NUMBER_OF_STUDENTS; i++) {
if(strcmp(gb->students[i].name, name) == 0) {
for(j=0; j< MAX_NUMBER_OF_ASSIGNMENTS; j++) {
if(strcmp(gb->assignment_names[j], a_name) == 0) {
gb->scores[i][j] = score;
}
}
}
}
printf("%d\n", gb->scores[i][j]);
return 1;
}我怀疑它比它所需要的要笨拙得多,但它能完成任务。有趣的是,我输入用于测试它的printf函数没有提供我想要的结果(我想我打印的是地址还是什么的?),但是实际的函数执行。
发布于 2015-12-11 03:57:29
是的,这就是一般的想法。printf不能工作的原因是在找到匹配的学生名称和赋值名称之后,循环继续运行。因此,在循环完成之后,您已经失去了i和j的值。实际上,在循环完成之后,i==MAX_NUMBER_OF_STUDENTS和j==MAX_NUMBER_OF_ASSIGNMENTS。
为了保留i和j的值,在找到匹配的名称时,应该从循环中选择break。(我还添加了一些错误检查,以处理找不到其中一个或两个名称的情况。)
int set_assignment_score(Gradebook *gb, const char name[MAX_NAME_LEN], const char a_name[], int score)
{
int i, j;
for(i=0; i< MAX_NUMBER_OF_STUDENTS; i++)
if(strcmp(gb->students[i].name, name) == 0)
break;
for(j=0; j< MAX_NUMBER_OF_ASSIGNMENTS; j++)
if(strcmp(gb->assignment_names[j], a_name) == 0)
break;
if ( i == MAX_NUMBER_OF_STUDENTS || j == MAX_NUMBER_OF_ASSIGNMENTS )
{
printf( "unable to set score (i=%d, j=%d)\n", i, j );
return 0;
}
gb->scores[i][j] = score;
printf("%d\n", gb->scores[i][j]);
return 1;
}https://stackoverflow.com/questions/34215318
复制相似问题