数学建模社区-数学中国
标题:
数据结构之字符串学习感悟
[打印本页]
作者:
慢跑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 Z
struct 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