数学建模社区-数学中国

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

作者: 慢跑20    时间: 2014-2-25 22:51
标题: 数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。: I' t, U, Q* n5 ?$ N3 u
初步代码如下:
8 C- l# b; P) `& u' J2 ^#include<stdio.h>0 c8 X1 x  E* f9 [  z, n, B
#define n 2
" o$ b- I+ x7 _$ Wstruct Student{
5 f2 U$ G$ J5 e8 |5 \$ O3 b0 t        char name[3];
3 I" N( N6 \3 d. l: ~  W  n        int num;
+ J; \5 Q& M) M- p6 Y! S# j, y6 z}stu[2];; e' h$ @1 H# I8 E

/ Z# E& m  v* z) u- hint main(){# m) S0 g+ t0 m3 a
        int i;
2 [$ D" u1 U! e8 H0 s% L% ~        for(i=0;i<n;i++)
# N+ P3 K5 s$ [* Z1 @3 K8 e        {gets(stu[i].name);# [( d* h! y* c, {; y3 \- f5 ^
        scanf("%d",&stu[i].num);
) Q( a2 N0 q/ P1 q. S2 i        }
% ~2 P/ @- J5 i- ]0 N# ^        for(i=0;i<n;i++)4 L0 {1 u1 t% l9 o
        {puts(stu[i].name);+ N6 V0 s  r8 A' k2 w5 ~
        printf("%d\n",stu[i].num);
. y$ n. t% V- `' e+ X  V        }* V5 U7 t" v( b( U' l
        return 0;3 ?2 y' n  A8 J9 q5 A' j/ i6 K
}5 s+ Q- Y4 a6 e8 {. F4 B1 z* [/ ~% Z3 o
比如我想输入第一个学生的姓名:s1,学号:10、
6 b8 Q% V, g0 X8 f: x( r然后输入第二个学生的姓名:s2,学号:20.: o! h8 d; {; v3 w/ z( r
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。% m  A9 P! u, i; k7 T
这是为什么呢?/ K, p  A% R3 i  H% V
仔细想一想。
: q( H" h8 X! _; X9 {) j2 q( G最终才发发现了关键的问题:/ d, b3 ^% ?2 f8 v5 H9 i7 i
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
' j" n7 p1 C( }0 {- `getcher就是用来存那个多余的回车的。! C) H2 D! Z% b9 p5 H: d0 ^% g
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
0 v" s& W  l, }  ]9 f* G0 N# U3 v
+ ]0 d/ K# T# g- t* J& K& F. B+ V) d! g- P
4 d$ R& f6 j, a0 x/ N& Z4 K% d6 x
, `+ ]) a  y7 m/ x& _

作者: sdccumcm    时间: 2014-2-26 11:47
支持个      




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