结构体数组引用的问题。

Mark0904 2011-03-14 12:34:26
/*在学数据结构时在anyviewds系统上做题出现如下错误。

*/
相关数据类型定义如下:
typedef enum {female,male} Sex;
typedef struct{
char *sport; // 项目名称
Sex gender; // 性别(女:female;男:male)
char schoolname; // 校名为'A','B','C','D'或'E'
char *result; // 成绩
int score; // 得分(7,5,4,3,2或1)
} ResultType;

typedef struct{
int malescore; // 男子总分
int femalescore; // 女子总分
int totalscore; // 男女团体总分
} ScoreType;


void Scores(ResultType *result, ScoreType *score)
/* 求各校的男、女总分和团体总分, 并依次存入数组score */
/* 假设比赛结果已经储存在result[ ]数组中, */
/* 并以特殊记录 {"", male, ' ', "", 0 }(域scorce=0)*/
/* 表示结束 */
{
int i= (result->schoolname - 'A');

for(i = 0; i < 5; i++)
//score[i].malescore = 0; ////////////这一句跟下面一句是等价的,其中任一句编译能通过。
(score+i)->malescore = 0;
score[i].femalescore = 0;
score[i].totalscore = 0;
for(; *result->sport; result++)
{
if(female == result->gender)
score[result->schoolname - 'A'].femalescore += result->score;
else
//score[result->schoolname - 'A'].malescore += result->score;
//////////这里上下两句代码也应该是等价的,怎么下面那句编译有错:Invalid Type-->
(score + result->schoolname - 'A')->malescore += result->score;
score[result->schoolname - 'A'].totalscore += result->score;
}
printf("malescore femalescore totalscore\n");
for(i = 0; i < 5; i++)
printf("%9d%9d%9d\n", score[i].malescore,
score[i].femalescore, score[i].totalscore);
}

//score[i].malescore = 0; ////////////这一句跟下面一句是等价的,其中任一句编译能通过。
//score[result->schoolname - 'A'].malescore += result->score;
//////////这里上下两句代码也应该是等价的,怎么下面那句编译有错:Invalid Type-->
(score + result->schoolname - 'A')->malescore += result->score;
...全文
417 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mark0904 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jialejiahi 的回复:]

刚才编译试了一下没有报错阿?
[/Quote]
我自己用codeblocks试了下编译没错误,运行结果也正确。
但用《数据结构》严蔚敏、吴伟民
自带的那个anyviewds系统做题时,编译就出错了。
for(i = 0; i < 5; i++)
{
score[i].malescore = 0;
//这两条语句应该是等价的。但如果把上面那句改成下面那句,编译成功,运行就错了。
//(score+i)->malescore = 0;
score[i].femalescore = 0;
score[i].totalscore = 0;
}

for(; *result->sport; result++)
{
if(female == result->gender)
score[result->schoolname - 'A'].femalescore += result->score;
else
score[result->schoolname - 'A'].malescore += result->score;
//这里上下两句代码也应该是等价的,但下面那句编译有错:Invalid Type-->
// (score + result->schoolname - 'A')->malescore += result->score;
score[result->schoolname - 'A'].totalscore += result->score;
}

//应该是这个anyviews编译器的问题。我们老师说这个编译器内核是另外自己写的,可能在这一点上支持得不好吧。
jialejiahi 2011-03-14
  • 打赏
  • 举报
回复
刚才编译试了一下没有报错阿?
masmaster 2011-03-14
  • 打赏
  • 举报
回复
Sex gender; // 性别(女:female;男:male)

Sex是什么类型数据
jialejiahi 2011-03-14
  • 打赏
  • 举报
回复
报的什么错,贴出来看看。
canican 2011-03-14
  • 打赏
  • 举报
回复
score + (result->schoolname - 'A') 加个括号可能会过
pengzhixi 2011-03-14
  • 打赏
  • 举报
回复
score + result->schoolname - 'A'
会解析为score[result->schoolname]-'A'
cuidx 2011-03-14
  • 打赏
  • 举报
回复
试试
((ScoreType *)(score + result->schoolname - 'A'))->malescore += result->score;

可能是类型转换时的问题
AnYidan 2011-03-14
  • 打赏
  • 举报
回复
有时不必非要按照提示找错误,有可能是别的地方因起的

有一次我给已编译好的程序加中文注释,结果是编译错误,删除了一句中文注释就好了
Mark0904 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jialejiahi 的回复:]

引用 7 楼 e3399 的回复:

引用 6 楼 jialejiahi 的回复:

刚才编译试了一下没有报错阿?

我自己用codeblocks试了下编译没错误,运行结果也正确。
但用《数据结构》严蔚敏、吴伟民
自带的那个anyviewds系统做题时,编译就出错了。
C/C++ code
for(i = 0; i < 5; i++)
{
sco……
[/Quote]
那就是这个编译器的问题了。呵呵。
jialejiahi 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 e3399 的回复:]

引用 6 楼 jialejiahi 的回复:

刚才编译试了一下没有报错阿?

我自己用codeblocks试了下编译没错误,运行结果也正确。
但用《数据结构》严蔚敏、吴伟民
自带的那个anyviewds系统做题时,编译就出错了。
C/C++ code
for(i = 0; i < 5; i++)
{
score[i].malescore = 0;
……
[/Quote]
嗯,编译器神马的有bug最烦人了。
yuxiabo1984 2011-03-14
  • 打赏
  • 举报
回复
我用vs2005 编译通过!
Mark0904 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lanxue_1988 的回复:]

引用 2 楼 pengzhixi 的回复:

score + result->schoolname - 'A'
会解析为score[result->schoolname]-'A'

++
[/Quote]
不知道有这个知识点呢。但我这种写法在codeblocks编译器里编译是能通过的。
(score + result->schoolname - 'A')->malescore += result->score;

如果是这样的话,score[result->schoolname]-'A'
那加对括号(score + (result->schoolname - 'A'))->malescore
还是会出现编译错误:Invalid Type-->
但在codeblocks上就不会。
碎碎念 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]

score + result->schoolname - 'A'
会解析为score[result->schoolname]-'A'
[/Quote]
++

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧