数学建模社区-数学中国

标题: 数据结构之字符串学习感悟 [打印本页]

作者: 慢跑20    时间: 2014-2-25 22:51
标题: 数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。+ |1 G! b8 _: f  [
初步代码如下:
0 y$ Z4 b) k1 ?! \; Y2 }- |#include<stdio.h>
2 n+ S- q9 B. k0 ~! f* v  Y#define n 2
$ s: S0 r3 d3 f1 Zstruct Student{9 u( u. Y* R% h
        char name[3];) \  v: H& v: ?5 i0 b0 D
        int num;
! ~3 [4 z; i* K}stu[2];8 |8 ^2 U- V* C& _0 `- Q* w% o1 B

: r" }* S6 m4 U1 E: ?int main(){
5 z* }1 i' `+ w6 l        int i;
- F! |- i' ]- R+ n1 m* J* i        for(i=0;i<n;i++)+ W9 [& Q: l9 v2 Q4 ~
        {gets(stu[i].name);
9 U2 T* I: }+ g& M6 v* _2 i        scanf("%d",&stu[i].num);3 R! T$ m- E3 X
        }/ n: p/ V" r+ P0 X
        for(i=0;i<n;i++)
0 P4 ~' H! ~7 F8 X1 B+ ^4 T        {puts(stu[i].name);
9 B  l" `+ b8 ?' l4 n) r0 S        printf("%d\n",stu[i].num);* I3 W2 C1 U9 ~8 X9 ]
        }# {* N* H/ }; P" O5 A4 S$ _
        return 0;! l& \/ k4 U7 p) z
}
) b( d: D/ b- E比如我想输入第一个学生的姓名:s1,学号:10、
' v# z9 M. A8 b然后输入第二个学生的姓名:s2,学号:20.
4 ^- \+ o4 r1 g- r1 p但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。. ]8 \, ]* y# ^* h
这是为什么呢?% q: W  g3 g9 B2 U  |0 n6 M% s
仔细想一想。
: p- y8 D5 f- }/ _+ P6 ?; `" v8 v最终才发发现了关键的问题:
  N# H7 Q/ q3 c% V5 c8 l& U在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。8 u# K5 n: K, [2 P4 Y$ O
getcher就是用来存那个多余的回车的。
2 o( W5 ]( N% c: t原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。% W/ B2 B) L# ^# j( u$ s6 S

" U1 e4 }( o; c3 e8 L- o) v
4 k+ z5 P7 S5 |5 `# o0 B" f6 Z2 P

, U7 t& v3 Z7 l% E. Y3 R
作者: sdccumcm    时间: 2014-2-26 11:47
支持个      




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5