- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
. X U/ l, F6 S# t初步代码如下:
: ]) ^3 f9 a( q#include<stdio.h>
+ A9 E% ^, h7 ~* N7 L2 ?#define n 2: e9 k& ?+ @5 I# @ R
struct Student{
: o" B7 \" T1 {1 l$ ? char name[3];
8 {0 Y9 s. D, |2 n/ p int num;0 ~4 ^2 p, L6 ~, u- _1 s
}stu[2];
0 B7 P7 z' r, e" T* t; I: I/ g+ M* r: n8 t" D2 A0 y9 y
int main(){, u9 o8 d/ \1 j0 I" X* V" V
int i;
5 i) [% j u' j! m; C/ Y- m for(i=0;i<n;i++)
: c+ ^+ e3 R2 ?8 A7 W+ r/ S5 D {gets(stu[i].name); V) C4 B! v7 F% B) A$ _9 [
scanf("%d",&stu[i].num);! X0 \" `$ I2 }4 f9 D& ]
}1 t; i' ^8 O+ r5 J: K
for(i=0;i<n;i++)
" X- N1 q) Q- }# {8 n; g {puts(stu[i].name);
( v1 r3 n/ R2 m) @; B printf("%d\n",stu[i].num);& \. Q0 R# U# m( s8 G
}4 _$ z$ h$ Q4 y6 L4 W/ K5 n
return 0;# @3 b( |( C1 Z. J. K& `# u0 ?1 x
}
8 B3 y- ~2 I7 _9 R' ^比如我想输入第一个学生的姓名:s1,学号:10、
! L% ]2 \& ?5 a" u7 Z0 |4 B然后输入第二个学生的姓名:s2,学号:20.4 |! Z0 Y9 X6 k% j
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
/ s$ O8 v; ^9 F$ O+ r8 u这是为什么呢?2 q% y( z# F1 Q- {
仔细想一想。: U) g. v. N( b( e' `2 U
最终才发发现了关键的问题:# c5 ?1 H! w4 f& ]4 O
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。1 ?, ?9 ]2 E: a* }) K. j! k* C% A
getcher就是用来存那个多余的回车的。
3 m# u9 w8 c& s* w- i原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。" ~) v* v7 ]# f) p( F9 H8 }
1 h. {9 J: d; j
& c8 {" j- i% [4 r: ^. Q" H& K0 \+ Y! {) E8 `) |8 c
7 l' D4 G/ n- D
|
zan
|