- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。/ \8 z0 {" W7 B W4 s$ v, A4 o a
初步代码如下:; M. O0 u8 Z- f, ^. G: u+ _; @/ S
#include<stdio.h>
. K: X. q; s# R# n5 @#define n 2) v& _: C3 [+ ?. J8 e& I
struct Student{
$ H( }9 x' E. Q3 q" n; }& f char name[3];# A+ g$ k0 `3 a& i, t( }7 d$ i' T
int num;
# I& ?3 v* k; r. w: n}stu[2];; ^! _* ^1 t( X) X4 g% _
! b9 B% Z( [$ e4 cint main(){
- b# p$ t q: b int i;
, S* |, c8 D+ H: y [8 }; x6 g for(i=0;i<n;i++)
4 d5 ]; O/ l) H {gets(stu[i].name);# U+ c0 T1 z+ N: u- F7 H
scanf("%d",&stu[i].num);
7 B- _- m; r2 R- d+ {# z }
( w1 G j) m' Z. M8 h, @" p for(i=0;i<n;i++)
5 J, A, q$ z- v {puts(stu[i].name);
2 m6 R4 B! f) U* g s printf("%d\n",stu[i].num);$ K+ ?( H2 P r% P: N
}
: Y8 j+ f- w/ p7 V6 W return 0;( z5 n9 w/ ], F1 ], k/ ~0 O
}8 ^ z0 g: ?0 c1 F
比如我想输入第一个学生的姓名:s1,学号:10、
2 l$ ?5 I" ]2 n3 Z+ z3 m然后输入第二个学生的姓名:s2,学号:20.
7 V. p, M, \. w7 l但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。. r! H2 G N* F
这是为什么呢?& V, N4 P/ o H& u1 k& Z
仔细想一想。
. `: A+ A6 A; ?) J! l& [- M最终才发发现了关键的问题:
. {# V( ^" Q6 }' n# U, `在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。 Z; b1 t# n& A0 C# ]
getcher就是用来存那个多余的回车的。# j0 i, M5 D6 I
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。) Q% D( e- i* _, t# t- E( z
# `/ }6 ~8 Y! F. T2 q
0 A) S4 v6 g/ b5 }2 M
' t& \8 h% G0 ?- z$ W
' c0 `# O ~' k4 d |
zan
|