- 在线时间
- 428 小时
- 最后登录
- 2017-2-22
- 注册时间
- 2011-9-18
- 听众数
- 8
- 收听数
- 0
- 能力
- 20 分
- 体力
- 6079 点
- 威望
- 110 点
- 阅读权限
- 200
- 积分
- 3684
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 759
- 主题
- 60
- 精华
- 0
- 分享
- 0
- 好友
- 40
TA的每日心情 | 开心 2017-2-22 14:21 |
|---|
签到天数: 271 天 [LV.8]以坛为家I
 群组: 2014年美赛冲刺培训 群组: 物联网工程师考试 群组: 2013年电工杯B题讨论群 群组: 物联网工程师培训 群组: 2013电工杯A题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
# \) O6 v7 M8 g! o初步代码如下:( V* Z9 q" n" ?8 e: C2 Q6 g
#include<stdio.h>2 X. p* x& D L; D0 M/ E
#define n 2
. E0 i- H8 Z$ ~7 Pstruct Student{
9 Q5 }3 J1 D6 T+ b/ d( f0 d char name[3];" N# G! k+ h* R, i4 e
int num;
! f6 u2 @3 ]; Q! q1 d- E7 ^}stu[2];* V' h* d: W8 ~9 u$ _0 ~8 k
: S& H1 k/ \: {! \0 R
int main(){
! `$ w, Z( G& G int i;
+ k+ `" V8 d4 D% n1 J; j9 i. Q for(i=0;i<n;i++)4 P" o1 R; F8 ?4 z
{gets(stu[i].name);
, B& V2 O; \% g& p( J) {8 x scanf("%d",&stu[i].num);
9 m _4 w! I% D }& i1 p7 P! S8 e9 u! E
for(i=0;i<n;i++)
0 h$ L9 u& |, _3 _' T {puts(stu[i].name);
. K$ T1 J, ]7 ]" j2 Y# O Z& W printf("%d\n",stu[i].num);
; H& y+ C' ]5 S+ H2 z }# @! K* f. H6 l2 _
return 0;
7 N5 b6 }) f! n' \1 E* C9 Q}
& o6 L6 _5 p6 D6 D* c8 d比如我想输入第一个学生的姓名:s1,学号:10、
3 U0 x9 R$ R( A9 i }+ s$ |( y然后输入第二个学生的姓名:s2,学号:20.
0 J p" o# T0 ^& d2 S但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。2 x& n" I+ U+ G, A. x" Z
这是为什么呢?
( i2 p4 N: P: H5 E0 b* u. K( D仔细想一想。0 {6 y* A* X# S7 Y
最终才发发现了关键的问题:
! Q% S/ [; B5 |2 P在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
2 }8 A7 T) z5 I* }; k3 X6 V: ogetcher就是用来存那个多余的回车的。
- U0 x6 M5 ?6 q原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
]+ V% F9 h4 j/ r3 ~8 g: V, v `8 _! J
) b: I$ @+ w4 f4 F+ U5 d3 f' u/ M \# D3 p: ]; y
$ R, h" p3 I+ k: _! M; f |
zan
|