发新话题
打印

问题求救1

main()) H- g# Y0 T- m7 R
{$ u' n) m  ?6 [! d# C
struct stud; _; N- U2 X3 h1 d1 f  {7 D* r6 r- k
{  V$ C7 h) M1 `+ F3 u& ^4 k
  char name[30];
$ A$ Z) A# d' u  P! b: `/ c! O, X  char sex;# k2 H6 v. N% X- w4 P% e/ `- b
  int year;
! k5 }! T# X- q; I };
) ^4 w, I& a% d4 X% @' M; ]5 z struct stud grade[300];
7 `+ ]+ s1 T7 } int malenumber,femalenumber,count;& }6 D' E+ K! w' P* n
char sex[2],year[5];8 L" X1 C# ?5 W$ o. |
int i;5 J0 ]' T6 J5 I& e, ?
for(i=0;i<50;i++)
. _; J  `) z: c$ F$ X {
, D; g/ a# D' |- p. ~0 K* q- M  readline(grade.name,sex,year);
; Y0 Y3 L1 u7 j, Q# `9 {3 t6 [  grade.sex=sex[0];0 K4 p1 g; C# @3 ?. J  Q% @+ P
  grade.year=atoi(year);
' ^& Y2 |- R; `& U* j4 D: p }
3 H' |: Y1 V+ p) Z for(i=0;i<300;i++)
5 o" b9 E! x# D; `! {: u {- F2 }7 ?1 ^5 I, u
  if((grade.year>=1977)&&(grade.year<=1980))
8 l' [( X8 p8 Q   count++;! b- f8 k$ p7 s+ j
  if(grade.sex=='m'||grade.sex=='M')- Q7 k0 `& ?: g, {' z: o
   malenumber++;
; A" `/ M, _( i7 P' x0 f  else
% ]+ g$ K: O9 {7 A) R6 _7 e4 n   femalenumber++;
6 |4 a/ g2 p, z }
: H3 g: r) t8 M5 I6 r1 n$ W9 H printf("\n male:%d",malenumber);' {+ j2 E* ]+ E2 P  I
printf("\n girlnumber:%d",femalenumber);) o$ s& Y( J/ I5 O6 C
printf("\n 1977~1980number:%d",count);  }4 m1 k8 ~2 j9 a* Q, R) _
}0 \2 R+ c/ N/ \8 R$ Z
readline(pname,psex,pyear)
- Q# g7 J& D+ ~" B' w! Echar *pname,*psex,*pyear;' n& @$ l, l9 r0 X# g4 U) W9 I
{- _9 ~7 N0 s% P% D
printf("\n Please enter name:");
6 ~/ v; d  [+ ?. i8 { scanf("%s",pname);/ p  r5 |+ V1 C
printf("\n Please enter sex:");  f! F# c# @4 [8 @7 H, S8 w$ D; }
scanf("%s",psex);
# k* j( E5 f5 b% { printf("\n Please enter birth year:");' `) }- U$ u* C7 z/ W
scanf("%s",pyear);" g: Z3 f7 W4 B! c
}
& z2 ^& [2 k4 W
* q. Z* C5 G# ~; X/ Z 这是一个做学生统计的程序,3 [% |% ^4 U2 f- {2 R0 u% ~
其中
& h: `: i9 m5 t6 i4 b' ereadline(pname,psex,pyear)
9 Z2 i+ e; B+ V7 ?char *pname,*psex,*pyear;
9 w- G4 O6 k3 x9 U1 v函数的参数都是指针,可是当调用函数时
* U; f( S3 W  ?" ]( K/ R9 l0 kreadline(grade.name,sex,year);; h& \" L' @, K% z+ R
  grade.sex=sex[0];
4 |  |) p0 u: f2 S% _$ ^  grade.year=atoi(year);% Q' W$ m  Q- Y
却都是非指针变量,这是怎么回事?
& n* Z7 ?$ P$ z
3 O+ p4 p3 x* u: s- f& {; T      

TOP

atoi这个函数是将字符转化为数字OK?
1 I* T* d  _& ssex = sex[0];
( D9 \6 y- ?' u9 y5 K- v本来 sex 是一个字符,而 全局变量定义的 sex 是字符数组,
3 v4 c( _$ r8 T0 [  d而字符数组是有两个数组下标,这样,就等于两个字符组成一个字符数组。; v$ D  x9 e* |- J6 C  r
所以 sex[0] 是将 sex[2]这个数组一个一个拆开来的第一个字符的意思,当然是相等了。因为sex[2]的意思等于sex[0]+sex[1]+ c1 q& @" A1 c7 @5 g' p
最最简单的表达,你明白了吗?      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

你没有看明白我的问题2 V* _) T7 y% J4 D0 P$ W2 ?
我不是问的这个,不要把我看的太笨,OK?
! M8 ]" Y8 E$ l/ d看清我的问题
! l& e+ U' I- `/ L: ^+ u其中 4 x/ _. l* T3 j  `2 y
readline(pname,psex,pyear) ) u4 U. B* a" R) t
char *pname,*psex,*pyear; 0 v% p3 Q# i# ]
函数的参数都是指针,可是当调用函数时
. s2 H$ I) ^; m% r- h2 Jreadline(grade.name,sex,year);
/ S2 O5 J7 v% Q  Z! kgrade.sex=sex[0];
! \# R' a8 }8 {0 u) z8 Rgrade.year=atoi(year); ! P) i4 K. |" z8 c5 \, P( v% D
却都是非指针变量,这是怎么回事?
  q. F/ r" X4 v: j4 i
; h0 a7 S. _0 \1 D7 ]1 ?7 D2 F  x
这是函数参数的不匹配问题,定义的是指针,可是调用时却用的是非指针变量?      

TOP

在你声明的地方有两个数组char sex[2],year[5]。其实,数组名本身就是一个地址,所以在有些编译器中对数组名取地址并没有多大的意义(两者相等)。即,&sex=sex       

TOP

我知道数组名是首地址,太简单了,我问的不是这个,请把定义看仔细
  v, |3 o5 A) V9 d0 `$ H: Pstruct stud & [  [- d6 I& s) f
{ 1 ?6 H# A5 l4 i& n) k$ S* W
char name[30]; " U# a* j; u3 r0 \9 M* j
char sex; " J% p/ m; G/ g1 N( S' H6 J4 Y
int year; 7 J( q1 U4 d! Y' @* p3 s
};
& I3 W8 R& D! [1 J, o# m' Q# H其中6 x! b6 s6 ?& q
name是数组,而sex,year都是变量,不是数组。而调用函数时
$ `( ?* Z2 t# t1 m- ereadline(grade.name,sex,year);
) v3 N  ^; ?/ k, K却是这样- r, Z$ q8 L' m" p0 ?
我不明白6 ?0 s1 k2 S% {* I2 U
是编写有错误,还是另有蹊跷?      

TOP

你调用的有不是结构中sex和year,如果想调用接过中的sex和year变量,调用的形式应该是
# V. Y6 ~) [& q+ q5 h( C/ m& Q. Freadline(grade.name,&grade.sex,&grade.year);# Q2 u5 F$ j* h& l, Y
在你的调用中readline(grade.name,sex,year),sex和year并不是结构中的成员变量,OK!      

TOP

发新话题