工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1809|回复: 11

师兄请帮我说明一下我为什么错?

[复制链接]
发表于 2007-1-12 15:04 | 显示全部楼层 |阅读模式

struct student
{
char num[15];char name[20];float eng,math,cpro;struct student*next,*pre;
};
………………
if (t==1) para="num";else para="name";
  p=pm=ph;
  strcpy(min,ph->para);\\这里老是提示我“para”: 不是“student”的成员
  for(i=1;i<count;i++)
   if(strcmp((p+i)->para,min)<0) pm=p+i;\\这里老是提示我“para”: 不是“student”的成员

num和name都不能用变量代替吗??
还有编译器经常报错说strcpystrcpy实参太少,可是我检查的时候明明不会少啊!这是为什么??
发表于 2007-1-12 15:07 | 显示全部楼层
para是student的成员吗?
回复

使用道具 举报

 楼主| 发表于 2007-1-12 15:29 | 显示全部楼层
但是我在前面
if (t==1) para="num";else para="name"
已经对他付了值这样不可以吗?

[ 本帖最后由 Ja5oN 于 2007-1-12 15:36 编辑 ]
回复

使用道具 举报

发表于 2007-1-12 15:30 | 显示全部楼层
C语言没有你所做的用法
回复

使用道具 举报

发表于 2007-1-12 15:31 | 显示全部楼层
不必加什么para呀
直接在if(t==1)这段加上你要做的事就行了
回复

使用道具 举报

 楼主| 发表于 2007-1-12 15:42 | 显示全部楼层
我下面还有一大串编码
如果分开开的话编码会很长
c不支持这种做法吗??
if (t==1) para="num";else para="name";
  如果我把这一句处理成条件编译可以吗?
回复

使用道具 举报

发表于 2007-1-12 15:50 | 显示全部楼层
不可以
你以编译器的角度去想想
如果让你翻译你这句话
如果能照你的想法去执行的话,又有一个student结构里有 para  成员,这时怎么处理二义性问题?
回复

使用道具 举报

发表于 2007-1-13 00:36 | 显示全部楼层
LZ, 按照我的理解,这样做是不正确的。
因为编译器分辨结构体成员是根据变量名来区分的,可以想一下:
“num”是一个结构体成员变量的变量名,而“pare”又是另外一个变量名。
para="num";只是给变量pare赋值而已,这可以在程序运行过程中操作;
而让编译器根据一个变量名分辨一个变量的是否某个成员,在C这种编译器中得在编译过程中之行的吧。楼主这种做法在VB中是可以的,但是在C中就......
个人理解。
回复

使用道具 举报

发表于 2007-1-14 23:25 | 显示全部楼层
举个例子:

饭堂里的阿婶打饭,她可以为很多学生打饭(可以理解为一个struct)
每个学生从她那里打饭,(就如同一个struct的不同变量)
你不可能指着青菜对阿婶说给我打一个鸡腿.
因为在struct里,你定义的就是一份青菜.那里有鸡腿呀??
回复

使用道具 举报

发表于 2007-1-15 11:10 | 显示全部楼层
其实就是饭堂阿姨根据菜名来检索菜,而且必须在你打菜的时候说明,打完后即使你说
鸡腿是青菜,它也不可能是青菜了......:L
楼上的比喻......现实
回复

使用道具 举报

 楼主| 发表于 2007-1-16 22:12 | 显示全部楼层
ls和lls的比喻弄的我的头都大了!!
回复

使用道具 举报

发表于 2007-1-19 03:28 | 显示全部楼层
LS应该看书..
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 18:43

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表