数学建模社区-数学中国

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

作者: 慢跑20    时间: 2014-2-25 22:51
标题: 数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
. v, p( ?. j2 s) {6 J初步代码如下:
, D+ [1 e1 X7 G#include<stdio.h>
- W# @8 f6 D& E! W: T* r- G( I) l& u#define n 2
( F5 P9 L" D% {- G8 C' S6 Ustruct Student{( o2 D( v1 W9 _
        char name[3];
5 @2 m/ }5 Q  ~3 x7 g        int num;- |4 c( @+ k) B
}stu[2];
4 q4 K# H3 ^' B! F9 P  E8 }0 M! X, O2 k2 H* ^0 A1 F" r1 N
int main(){. ~1 ?" w0 r. M- Z4 Q. k
        int i;
7 }3 \1 d9 e; h3 e: ?        for(i=0;i<n;i++)
% x- ?6 r  e2 J! x        {gets(stu[i].name);* p) t: ]4 Y! [
        scanf("%d",&stu[i].num);) M, X" t* E8 F, D7 Y, q  Y- }3 {
        }
8 }6 b2 f- ?% G* p% Z& B" S" H* |        for(i=0;i<n;i++)2 [  Q) z5 l! C+ r( y
        {puts(stu[i].name);: r% X# _! A. S3 _* n4 M
        printf("%d\n",stu[i].num);
1 t# y3 P- o1 A        }
9 O( |3 f7 K9 I- r, p        return 0;
/ A( O2 B/ M' Q7 y5 Y7 b}
, H1 j" o; f# e8 h, f& `比如我想输入第一个学生的姓名:s1,学号:10、
8 j6 G% i* Y* @1 m然后输入第二个学生的姓名:s2,学号:20.
. o9 d  h# o; ?  n$ a" i但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
+ v# a$ R2 S% S* F) _" h这是为什么呢?6 O) e$ j! P; t3 |; c+ C- V
仔细想一想。
, [% F; Q. x/ z4 o最终才发发现了关键的问题:
- ~: g1 [4 ~6 Q& j( K& L& g在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
/ p( i+ ]4 H+ Fgetcher就是用来存那个多余的回车的。
0 ?( ^, @7 W! `, R) V4 N原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
( l0 n( v  G3 J8 \% R" O' s  h& k# [0 s" O& N

; q: D& J  m4 W! ]
% G& M" K& V2 W2 m1 p$ `. |
3 k% O3 Q3 d5 \- d& ~$ i5 W) V$ Q% J
作者: sdccumcm    时间: 2014-2-26 11:47
支持个      




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