- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。/ m+ o: d( p: P6 j8 U
初步代码如下:9 g5 J/ I* ~ }
#include<stdio.h>4 m* L5 J% T, s- o% M; E$ A
#define n 2
* e/ a& _- N0 lstruct Student{
9 Z: n$ z0 N/ j' m; Z: D0 @/ N char name[3]; a& B% `4 L1 y7 q( y9 {' L
int num;4 T! ?2 L" G7 S; _. l
}stu[2];
r! ~2 R7 N$ s Z; X, o+ @* \" h
) l% x7 ?# H3 U; U7 c4 Hint main(){; l; l% C: L2 [9 r
int i;& m! v( c. R8 ^5 s3 F2 G
for(i=0;i<n;i++)! L# ^, q: i5 ~+ Z* \
{gets(stu[i].name);4 w4 s3 v6 h4 I: Q* n& L e. l
scanf("%d",&stu[i].num);
8 Q0 z8 q) x$ C* ^( \, ]7 p* T7 \ }
) l0 D* W5 H# v' c for(i=0;i<n;i++)/ P. C; {& p, |$ N
{puts(stu[i].name);
4 u' n" H! \8 c7 o! L1 l printf("%d\n",stu[i].num);* r/ `; i( b+ G& h6 \
}3 T% H7 C* Z8 A! @8 T6 |$ Y
return 0;" J% y6 Z3 K2 C0 N
}
: z5 v4 n( M0 P/ @( X比如我想输入第一个学生的姓名:s1,学号:10、
, |- N- g" O1 O! r/ Q然后输入第二个学生的姓名:s2,学号:20.( M! D7 V0 A/ S
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。' u% F' f3 q. A% p& J. v2 d4 q
这是为什么呢?" o! B- O% L" S% E; F6 ^4 z% L
仔细想一想。
# ~/ L% I3 b0 O4 w9 W最终才发发现了关键的问题:
2 p& r1 O2 T+ J9 G在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
1 G* e( c7 Z+ Z3 d5 x3 I, fgetcher就是用来存那个多余的回车的。
( W8 Q+ A2 c( z/ o原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
# T8 p$ J3 ^: O' a9 ?
, B9 X" X9 B) g J% h8 o+ c& T5 z* O; C" ?$ G8 v! }2 v% I
7 u( E* e0 V; J y( c/ o* O* y1 w8 S
& ^3 z# V$ \ ], V) H% }; S |
zan
|