首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按类别导航2D数组?

按类别导航2D数组?
EN

Stack Overflow用户
提问于 2015-12-11 02:47:06
回答 1查看 42关注 0票数 0

再一次,我要感谢大家对我上一次的升级书问题做出了迅速的回答。我现在在这个项目中走得更远,遇到了一个(在我看来)更棘手的问题。

指令要求我用这个原型创建一个函数:

代码语言:javascript
复制
int set_assignment_score(Gradebook *gb, char name[MAX_NAME_LEN], char a_name[], int score);

再次,它将通过*gb指针进入Gradebook结构,但这一次,它的目的是访问分数数组:

代码语言:javascript
复制
int scores[MAX_NUMBER_OF_STUDENTS][MAX_NUMBER_OF_ASSIGNMENTS]

..。并将“得分”整数存放在特定的单元格中,以供进一步使用。两个Char参数很重要,因为稍后我需要从分数数组中检索每个特定的整数,并在print_gradebook函数中匹配它的精确名称和a_name。

我很想分享我到目前为止拥有的代码,但事实是,我几乎不知道从哪里开始。但是,我认为关键是知道如何使用char名称和char a_name来导航整数数组,而不是通常的i和j。

欢迎任何建议、建议、嘲弄或要求澄清。请。

下面是梯度书的结构:

代码语言:javascript
复制
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;

编辑:谢谢大家!结合你的建议,我想出了如下结论:

代码语言:javascript
复制
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函数没有提供我想要的结果(我想我打印的是地址还是什么的?),但是实际的函数执行

EN

回答 1

Stack Overflow用户

发布于 2015-12-11 03:57:29

是的,这就是一般的想法。printf不能工作的原因是在找到匹配的学生名称和赋值名称之后,循环继续运行。因此,在循环完成之后,您已经失去了ij的值。实际上,在循环完成之后,i==MAX_NUMBER_OF_STUDENTSj==MAX_NUMBER_OF_ASSIGNMENTS

为了保留ij的值,在找到匹配的名称时,应该从循环中选择break。(我还添加了一些错误检查,以处理找不到其中一个或两个名称的情况。)

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34215318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档