数学建模社区-数学中国

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

作者: 慢跑20    时间: 2014-2-25 22:51
标题: 数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。. F  q! r7 X* N( I3 `" O, E
初步代码如下:. u8 y- f  X4 j: k/ m5 |" g# x) ?# g
#include<stdio.h>* H# R1 |- b: G% V5 R0 G
#define n 2
8 f. ]% K6 l. Zstruct Student{( a7 y6 t: g9 B% B4 Z
        char name[3];$ i! K0 |& F' q
        int num;
  ?& p4 s& s, [}stu[2];
8 h1 r: F% {) H. ^2 |  {7 V5 C% j1 Q; D+ N9 ]
int main(){; X  t% n" _6 z7 `
        int i;* h  q% w& ?. r8 w
        for(i=0;i<n;i++)
& n0 L3 ]- U6 y1 Q( R+ H$ O        {gets(stu[i].name);  e6 l: U$ s! j4 L8 @
        scanf("%d",&stu[i].num);
! j" g# ~, w  F& q        }
1 |) w% U4 o2 {* ~) K5 P        for(i=0;i<n;i++)
8 Z5 ~% b, T0 i- w( n        {puts(stu[i].name);! f2 O! J& `; _. A% K1 O0 i, i$ l
        printf("%d\n",stu[i].num);
6 s& T# G7 Z3 ^; H$ U; o        }
1 }5 o& t6 _& q# l* O4 B: X        return 0;
+ J7 b2 F/ @# j}9 s* h& o' x2 \4 u0 U
比如我想输入第一个学生的姓名:s1,学号:10、, H$ F4 `0 l1 Q) p8 u4 u
然后输入第二个学生的姓名:s2,学号:20.
5 c' \: e$ y: r: E4 g& Q但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
) U" ~2 `2 B3 ^" b! Z1 q这是为什么呢?
" E8 }0 M7 d$ }/ D7 S4 l! q: e3 j仔细想一想。
$ w- G! v$ z; x6 l. D% y! D6 h: v最终才发发现了关键的问题:1 o% |+ e7 L; x+ _, e& R
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
& c  K6 x1 A& F! T2 c. [getcher就是用来存那个多余的回车的。3 C+ B& o+ a7 ?. ?
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。3 u, x( p* B) X/ x, |
) T9 i, z! W- P' D" @7 \) |  E9 v& M

6 T, R2 ^% M5 v) Z: t. J5 b( y$ Z5 m8 n  u8 j5 a0 J& B
( r9 A7 m$ g+ u

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




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