数学建模社区-数学中国
标题:
数据结构之字符串学习感悟
[打印本页]
作者:
慢跑20
时间:
2014-2-25 22:51
标题:
数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
# N7 m: l0 Y* r
初步代码如下:
' k9 e( Z7 F U9 c/ d# k
#include<stdio.h>
j; @6 e4 ?9 Q8 ~
#define n 2
- `4 p# `* q3 j: H/ q" s2 n
struct Student{
3 q6 N; v6 F, P4 N4 g: |
char name[3];
; Y2 o5 ^9 }, |3 |, Y
int num;
5 Z k' \8 T" |- y4 o: |
}stu[2];
9 m* B7 Y$ r' T4 q: P
/ [$ L. l0 [" m7 E+ W2 o3 B
int main(){
& ~, q7 \% T* b! K! H" w. G, t
int i;
4 k3 i( d3 W/ |$ w9 n% _6 C
for(i=0;i<n;i++)
# ?- Q. ]# B* D8 @ p
{gets(stu[i].name);
/ B9 g3 W+ T5 x% L( A
scanf("%d",&stu[i].num);
; S& N5 I1 ?- q$ p. D
}
6 d" y1 k; ^+ }0 F- u! {
for(i=0;i<n;i++)
1 I4 P8 g9 k$ H, D
{puts(stu[i].name);
' W A+ Z* g" F/ s$ J9 w
printf("%d\n",stu[i].num);
) q9 L" E( a$ C/ p9 f( g0 q8 { q7 V
}
# ?1 v; k/ h! k C
return 0;
1 \3 z6 e, r3 q! A q) o& A) x+ }; ?
}
" t/ w. o) T( w8 N
比如我想输入第一个学生的姓名:s1,学号:10、
/ u' G: K( q: u
然后输入第二个学生的姓名:s2,学号:20.
+ G5 Z4 T4 g4 a z
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
3 t' b0 U, n% F' O9 S3 e
这是为什么呢?
- s+ Q* |* ~% Q9 n
仔细想一想。
; f' A* d. G3 g' h
最终才发发现了关键的问题:
/ e& M/ W: y% |! b: T! [( y
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
3 a) ]+ E) e4 g4 P1 x# j. N
getcher就是用来存那个多余的回车的。
6 l# _ t/ b/ a, l ?' n- n
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
3 V# J4 P$ T4 h' x* U
3 v9 S" F3 U i! u) m. s: L
1 m- \$ e7 G6 E; C* A
. D6 Y0 D, M) j9 d/ x$ X
& R, ~- ?! W& Z, C$ c, `0 l% T
作者:
sdccumcm
时间:
2014-2-26 11:47
支持个
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5