| 
在线时间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| 数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。 % ~  U: J3 n! g. @" @# Q* J* K初步代码如下:
 . x8 B6 O( ]2 p5 @( D( p#include<stdio.h>
 + `+ j+ Z4 K$ ?7 O#define n 2: J, q9 [+ u: l& Z
 struct Student{
 - o+ `% U8 s7 L2 r  @) C        char name[3];) W  k+ n5 X: Z" t8 i
 int num;- ~7 _" Q+ z  r# U# }7 c
 }stu[2];/ p; j& q( N5 ]9 t. @3 |. {/ o
 
 , {3 i0 w2 X- r7 ^3 Gint main(){
 5 E/ p4 }* f+ w' U- B  e- H: [6 m        int i;
 # T- n% Z) N2 d+ a        for(i=0;i<n;i++)  U! ?8 n9 I) r; L+ E# H7 C! ~
 {gets(stu[i].name);6 n  ~& f  e; ^/ p% I8 b4 J
 scanf("%d",&stu[i].num);
 2 q' u( k) L: x6 C" l6 ]* ^        }
 : K# m3 P8 O# r* W        for(i=0;i<n;i++)
 " p+ u. H; \  l4 n- W  m        {puts(stu[i].name);1 v- s8 `0 s% G: Q6 p6 R: x' ?
 printf("%d\n",stu[i].num);2 q: M; L' A6 V
 }
 * a" e" @' K9 f8 {1 w7 q        return 0;
 0 l- t/ k  d- R: K* D' v# m( f}
 ; K$ d/ p; X* [. w( S8 H* I比如我想输入第一个学生的姓名:s1,学号:10、+ z. l( _& q& R- I' G
 然后输入第二个学生的姓名:s2,学号:20.- h5 m5 ?" p( r
 但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
 5 V0 u- q/ b1 }% f5 ?这是为什么呢?
 ( _, l/ S  S1 _% m% ~- B仔细想一想。
 * E3 S8 @# a/ @6 |6 d最终才发发现了关键的问题:
 / z, \7 L+ w; u/ [8 l在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
 ) D1 A4 a8 S3 q$ _+ d7 g, Jgetcher就是用来存那个多余的回车的。
 ; `: o3 w6 z- V/ C原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。* Y: R& D0 a( v5 F+ [" p
 # w4 J* |& h1 h; e6 ]0 a6 Y
 , }. p9 `2 T! B( q
 
 5 E1 g! X; h5 B0 S( U) L; y! Y: T4 e8 H/ f4 s( |+ E
 
 | 
 |