发新话题
打印

问题求救1

main()8 |; ?+ J8 A6 K" [! N* [
{" X, B8 X! x7 e
struct stud, W, w# k; T4 K0 C4 U
{+ {' G( a7 m) A  o5 F5 Y
  char name[30];& P9 \6 _( z0 G; _* q( G, m, R) @+ J
  char sex;
) T  ^, `: N& Q  int year;
! c- [: w, G# j4 b" E9 w };
5 H; V! L# k8 [2 F: I struct stud grade[300];/ F- a( U1 [% j' V9 E  w
int malenumber,femalenumber,count;
" j' P& z% m8 e char sex[2],year[5];. ^+ N8 H. R5 ?4 C; E
int i;  {8 P" Y: [2 R
for(i=0;i<50;i++)$ Y8 v  S: h2 W* N
{0 g3 K( a2 D3 B8 N/ F
  readline(grade.name,sex,year);" y; T2 A% u$ n9 K5 H
  grade.sex=sex[0];" R3 ?/ x  \7 v2 F
  grade.year=atoi(year);
  E4 u1 k$ p/ a3 s3 Z  N) K0 I+ T }! N8 u/ I8 s: c: S! c
for(i=0;i<300;i++)
* M- I: `6 Q) S; ]; c: Z {
+ D- _2 N8 ^" j1 U  if((grade.year>=1977)&&(grade.year<=1980))
! Z4 a2 N  ~8 t) K+ d  F* D1 ]- n' R   count++;
8 Z0 Z8 Y" b  M/ i  if(grade.sex=='m'||grade.sex=='M')
  f, h' V9 m/ k+ v+ [/ T$ v$ }   malenumber++;/ Q) c* X+ a# [. y" x- S
  else
# x% o" q) A/ J+ g3 c   femalenumber++;& C- _  G; ]' K& k  N  d
}8 O* I3 H5 F9 }, F4 K
printf("\n male:%d",malenumber);) h9 f5 L2 x  c6 S; C6 @
printf("\n girlnumber:%d",femalenumber);
/ E: C5 q$ y( T6 }0 V3 `1 d9 u5 t printf("\n 1977~1980number:%d",count);
4 u- }; t6 Q5 `* s}
+ q1 X  Z( y9 ~7 d  c9 \readline(pname,psex,pyear)5 b5 i1 M: I# T- N# e# E
char *pname,*psex,*pyear;
+ E$ A+ \# l1 E- O0 b3 {{
$ a+ u2 j) N1 C  \ printf("\n Please enter name:");
2 F% V! E/ e. K8 p' N2 x/ n scanf("%s",pname);
5 o+ E/ u1 D/ ?4 h+ d7 C# x. X printf("\n Please enter sex:");0 p0 r% T' U5 k  w: p8 f  s0 Y
scanf("%s",psex);) {4 T: n9 _& I4 R; M: ^, F
printf("\n Please enter birth year:");
9 T! W- k2 O5 p  L( H7 U1 { scanf("%s",pyear);( T) c, O5 y  g. U  u
}
0 a& ?: W; ?! Y, \. r, {: S
* d! b4 e9 q! h5 J& U 这是一个做学生统计的程序,
$ d* b7 c) C1 c* q1 E其中& B2 O) q  [; J/ H
readline(pname,psex,pyear)
$ ~7 q/ D4 K$ \char *pname,*psex,*pyear;
0 o& K0 g1 r' i7 p+ {7 i- R( m# z函数的参数都是指针,可是当调用函数时5 K! T; P  l( ~! O9 k4 _. O0 o
readline(grade.name,sex,year);
' M% t1 S) s- a3 f6 Z6 B  grade.sex=sex[0];/ y5 _& W$ J6 S( S- B  n+ G5 r
  grade.year=atoi(year);
4 \3 g$ H! g4 y4 _. Z却都是非指针变量,这是怎么回事?
$ W; n1 d4 p7 \5 i: ^( A# } . Q8 S! |8 e) ?. _' @9 X) P0 V
      

TOP

atoi这个函数是将字符转化为数字OK?
9 ^# `# @% F& Hsex = sex[0];  O' p  U9 J4 H9 ~8 Y
本来 sex 是一个字符,而 全局变量定义的 sex 是字符数组,
  k' \6 j2 C6 \2 d$ W3 _而字符数组是有两个数组下标,这样,就等于两个字符组成一个字符数组。
1 b0 V9 P/ R; R所以 sex[0] 是将 sex[2]这个数组一个一个拆开来的第一个字符的意思,当然是相等了。因为sex[2]的意思等于sex[0]+sex[1]
8 E7 y; k% f) g最最简单的表达,你明白了吗?      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

你没有看明白我的问题3 E! X* C0 D' m% _7 U% [7 G; V' w- }$ c! f
我不是问的这个,不要把我看的太笨,OK?
7 X/ n$ Z: o/ b. z: M) A看清我的问题
& J' k9 h9 m6 G% P- e其中 / g" L1 r* n6 @! B) p9 ~
readline(pname,psex,pyear)
4 R6 h" ?8 P2 g- T. O  cchar *pname,*psex,*pyear; ' u& l( L' g6 W5 p- Z8 F" |' |7 `
函数的参数都是指针,可是当调用函数时 % M) Y* F$ r" S  r
readline(grade.name,sex,year); 0 d- M1 ?8 W  c. [4 ]
grade.sex=sex[0];
& C; z9 o' \8 v) Lgrade.year=atoi(year); 2 n/ j+ M( n3 Z9 T
却都是非指针变量,这是怎么回事?
# l7 `2 W2 P! P  f0 i$ y6 ~" E  F$ o* G7 D* g1 [/ a
0 b: _, w' R# g1 }9 Z
这是函数参数的不匹配问题,定义的是指针,可是调用时却用的是非指针变量?      

TOP

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

TOP

我知道数组名是首地址,太简单了,我问的不是这个,请把定义看仔细
' H$ G- d5 J: R2 ]struct stud
8 B* t3 U) F$ j{
. A3 T4 q% I0 K  a0 n  ~char name[30];
( q1 C, o- c7 C+ k+ b* jchar sex; ! P9 z$ L; ?: R) O& A
int year; % C$ J2 E6 Y5 u6 T! `
};
& n+ [+ T9 k+ c其中/ @5 S4 Z4 d, x
name是数组,而sex,year都是变量,不是数组。而调用函数时
) q( A: |& T4 E1 g- treadline(grade.name,sex,year);
' `# L$ |5 e  Z5 [1 A却是这样
/ r$ K) b, Z5 W& c我不明白
$ {5 z" H- m) m' n1 m是编写有错误,还是另有蹊跷?      

TOP

你调用的有不是结构中sex和year,如果想调用接过中的sex和year变量,调用的形式应该是
! t3 O# C$ B' m7 X  M0 ireadline(grade.name,&grade.sex,&grade.year);
. V- s# Z5 M8 `在你的调用中readline(grade.name,sex,year),sex和year并不是结构中的成员变量,OK!      

TOP

发新话题