| 
在线时间428 小时最后登录2017-2-22注册时间2011-9-18听众数8收听数0能力20 分体力6079 点威望110 点阅读权限200积分3684相册1日志0记录0帖子759主题60精华0分享0好友40
 
 TA的每日心情|  | 开心 2017-2-22 14:21
 | 
|---|
 签到天数: 271 天 [LV.8]以坛为家I 
  群组: 2014年美赛冲刺培训 群组: 物联网工程师考试 群组: 2013年电工杯B题讨论群 群组: 物联网工程师培训 群组: 2013电工杯A题讨论群组 | 
zan| 数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。 5 T* p/ K6 j! X初步代码如下:! @" z9 V2 H" `! p+ G  d- q
 #include<stdio.h>
 " s* j9 q2 g. T! _4 _* X#define n 2
 * G" x7 `, Y1 u! ?0 astruct Student{+ @& l+ J9 n) |: W3 r
 char name[3];' y& y! g/ g1 a3 E# U9 Q
 int num;8 j0 t# G0 T8 o3 m/ T* M2 I' ]( V" [
 }stu[2];( Z) Q6 d  V* S$ V1 B+ E
 n7 h  P/ R. W* b3 T
 int main(){! g. A8 [  ~) L* M. Y* r
 int i;) {+ I5 l3 |+ P- p5 \6 y% |9 J  U
 for(i=0;i<n;i++)
 S) `$ F/ L1 \' X        {gets(stu[i].name);
 # C9 e2 r/ o" T        scanf("%d",&stu[i].num);5 M9 ^5 u% E  z. h
 }* h0 F  z* ]% M
 for(i=0;i<n;i++)
 " D4 g7 M, _' }; v1 X7 _- S  q        {puts(stu[i].name);: {" F' B# ?2 H- ~! H1 n5 Q/ j& @8 s
 printf("%d\n",stu[i].num);3 p" }* H- [0 U* F! x1 N
 }
 : z5 P( h8 S9 ]5 y- y9 X, g        return 0;
 ! B* U; h3 w3 t. p: l  k" q}
 9 s+ D( @& S/ J比如我想输入第一个学生的姓名:s1,学号:10、
 8 ~4 j7 y! y0 M5 k0 r& ]* A然后输入第二个学生的姓名:s2,学号:20.
 6 B' a  {1 `9 [. s" |2 _7 r但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。4 H/ ^: ~, P+ G2 I
 这是为什么呢?
 # E2 w) R1 H0 v. m: {( n+ f仔细想一想。
 % z  W/ L& C. K; k  U最终才发发现了关键的问题:
 & x: ^1 D; X. u) h# Z/ L( f在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
 + b; D2 ]) `3 n. A& [  O2 `getcher就是用来存那个多余的回车的。
 ' v: C/ {  D* ~& H# |; K/ u( c2 d原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
 + r: h; _+ ~3 {! o# ]! h" D6 X9 X% k4 a* B/ G6 r6 D
 ) g: P% s# \) D
 + v, g5 u9 \4 V" ?# f4 c5 j
 
 - Q+ W6 x8 [; o+ \: g% `
 | 
 |