数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。 Z+ c+ x3 A4 }0 O- D$ e9 t初步代码如下:* n1 N* M1 v. \
#include<stdio.h>" b4 {5 n2 _3 K1 x- j3 D
#define n 2 ; Z f3 o* z& }/ Vstruct Student{6 Y8 n0 Y% D W/ o, [ B
char name[3];; K0 `: l: j& A* W
int num;% f1 ~' s5 w) N( u/ U' M' O. _/ n* B
}stu[2];0 k7 T' N ^' e5 O e
( g& D( R" G" @ o+ j- rint main(){, @" p$ _2 l, p7 a# w- M* n: { Z
int i;8 ?% z9 N; i7 U K: n" O" j
for(i=0;i<n;i++)9 f& _' |' t G' n* h% t* S" z. F
{gets(stu[i].name); , C i* J' {: Y0 u. |- x: f- U$ D" s% i scanf("%d",&stu[i].num);0 C a0 m3 M. S$ \" m4 ~
} # |2 ^! Z$ P1 e1 i for(i=0;i<n;i++)2 [ ]( b) H2 }8 E; V, X6 Y: F F
{puts(stu[i].name);+ C V" |4 W A+ f/ F* y
printf("%d\n",stu[i].num); 2 e5 w+ m; h- g1 w$ c K } Z. b" Y. T, L" o5 k: s, D" F8 [ return 0; ; ^0 z" V" Q) f x$ t! _6 t} 7 ]. s' W6 _7 X. B) O$ S8 F比如我想输入第一个学生的姓名:s1,学号:10、 + ~% b! ^' r2 z8 v5 x+ j. y& d然后输入第二个学生的姓名:s2,学号:20. 6 P7 W+ [2 F" D. P( j但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。 5 O: } u! O u7 ^这是为什么呢? * a# u; ~9 g7 q+ ~( N2 v* O4 h仔细想一想。5 _7 u( R$ P; w7 C% ^8 W0 @! i7 `
最终才发发现了关键的问题: 0 U- Q8 F( f R4 J在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。 I2 |2 p i" P: D, |5 _7 Ggetcher就是用来存那个多余的回车的。! ^, E8 v* M3 u+ ?6 T/ `4 J1 T5 @/ H
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。 5 J" k* X6 G& H* x( F0 t3 {4 ^' D0 ?8 T
; F7 D& e7 x5 \ b6 ]: F. y L$ c0 F* G: n
; v# |/ d, u+ a O% H2 N