数学建模社区-数学中国

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

作者: 慢跑20    时间: 2014-2-25 22:51
标题: 数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。; A+ L2 A( e! m
初步代码如下:- F9 c7 Z/ A0 K$ D+ s- e
#include<stdio.h>
9 |2 [# k' f; m. ]2 |, V, J$ q#define n 24 c  w9 j$ T# @, h+ r  z
struct Student{. U# C* o: W+ P$ B
        char name[3];
1 b  K2 R# T1 R8 ]7 I$ W: |3 ]        int num;7 K% S- |0 z' D' V- p2 T7 j
}stu[2];" t& R0 X7 {/ V& s  V# y" l

' ~6 d& K8 Q; n6 a4 n, r9 Bint main(){  b9 W  @& F' P
        int i;# g; i! Y$ j/ q: s; _* n
        for(i=0;i<n;i++)
2 K# Z+ w8 K2 ?  I$ h9 \        {gets(stu[i].name);: @  b- f4 C/ a1 R
        scanf("%d",&stu[i].num);; Y1 |% E- n7 c) v9 |
        }
5 O% L- J) `% x, ]8 o. a" k3 |        for(i=0;i<n;i++)
9 h4 ]& K' z. @' w; W        {puts(stu[i].name);. Y& U% a6 m0 C- d" G
        printf("%d\n",stu[i].num);
2 q' S1 S, a/ q5 t1 w        }: H7 Z9 w8 _. A! u+ R
        return 0;; W1 b! D- I: n
}3 h5 w7 \2 }' r1 d2 o2 c9 S
比如我想输入第一个学生的姓名:s1,学号:10、
* X5 @, O  z2 o6 [6 v, ]. y& B然后输入第二个学生的姓名:s2,学号:20.
* w2 @# Y6 u* O1 q  H但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。7 E  ^" A4 v+ g  E$ n
这是为什么呢?' c& d9 `5 O6 E: W( {- O0 Y  ]
仔细想一想。
  n$ U5 i  \# H$ g最终才发发现了关键的问题:- K1 z1 [/ b9 j& z9 Q
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。/ ~6 n1 G" Q& e* k% [9 ?6 U* _' H
getcher就是用来存那个多余的回车的。  M7 }. D  i+ @8 z+ T& _
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
6 ~2 D- O9 G) C  H" }+ ~! b* B+ e' O9 {% u8 h
1 L. G$ Z* j: u8 A9 g4 V

* ?$ h% N8 P0 m" U2 X3 z0 M" x  i( U! o$ E* G

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




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