数学建模社区-数学中国

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

作者: 慢跑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 Bint 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. Ngetcher就是用来存那个多余的回车的。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: L1 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