数学建模社区-数学中国

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

作者: 慢跑20    时间: 2014-2-25 22:51
标题: 数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
1 g9 [; H- I8 u& B9 }初步代码如下:
+ p8 Y. e% E+ @7 z/ C0 P+ f! u( _- {#include<stdio.h>9 Y% x! T* {2 m/ ?! a1 V
#define n 2. Y/ x1 x( p; d( F. f" r4 M
struct Student{
! N" F/ C( A' o8 I5 t7 S        char name[3];4 m2 T6 f5 v7 x5 _( G
        int num;
" H, z1 l4 m% _}stu[2];- O5 D/ w' I, t9 t, i

% y, `( l0 O7 u" `% o+ ~int main(){
  P! Q# ?" S' u        int i;
  b2 o0 E5 u5 r6 C        for(i=0;i<n;i++)" o; k5 ?4 h8 Q8 v0 ]  v& w
        {gets(stu[i].name);
5 i; Y1 N: i: m- U" Q        scanf("%d",&stu[i].num);
) [5 b7 |( j) N6 _6 d        }
3 x) S3 Y( t. i( t- ]        for(i=0;i<n;i++)
, r- H7 x& V* h$ P8 k' r9 O        {puts(stu[i].name);
( i9 q/ |, B& J: y  b        printf("%d\n",stu[i].num);1 a! M. a3 M0 N+ |) d: h
        }6 o# f; q% @/ e
        return 0;
% b" E, y' e4 r. s% a}  ]1 s# [8 m( C# Z$ j
比如我想输入第一个学生的姓名:s1,学号:10、
# V7 ~2 C# j7 r7 o1 X  y然后输入第二个学生的姓名:s2,学号:20.
9 d: Z; T( D( f, ?, l( n/ K8 }但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
2 E0 a7 r% ?" w. o* b这是为什么呢?2 S3 W8 y4 W$ Q: i. L6 A6 g5 X
仔细想一想。
0 \5 g* Z4 ?1 I' B) C3 O最终才发发现了关键的问题:  k) J  m( z) f  [2 X# |6 n9 W
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
- O: S8 j& x5 Z; egetcher就是用来存那个多余的回车的。
" k0 \0 [2 F6 J& E0 L  Z/ L( b原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。. X! c2 L  K9 z1 ^/ a' [6 q

; \% s$ R/ F5 j2 T- E  }* `1 @! {* j8 u) `

3 u7 O* x8 m9 }4 W
: @8 @5 [: H/ @
作者: sdccumcm    时间: 2014-2-26 11:47
支持个      




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