- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。: v& q3 `4 l: @) F- K% |) a
初步代码如下:% h. P( v5 o2 V0 n5 y
#include<stdio.h>) r! |, F& u3 X4 `" [
#define n 21 w+ Y9 w3 {0 N
struct Student{. L( A, O4 D& [ o- p
char name[3];9 o" }, @, ?) u5 H
int num;
$ t8 I) y+ j' @ ~' t' H" w}stu[2];
* b9 G) C1 T+ I0 E- j" D7 u' V
0 j+ e6 J1 R6 G+ f1 gint main(){
9 ]" D$ d& N2 r* k5 i7 D0 Z( o int i;8 F, M, S, b% `7 \9 K
for(i=0;i<n;i++)
% H$ Z. x1 M% {! o% Q- P' Z {gets(stu[i].name);4 U5 N, T& R# Z
scanf("%d",&stu[i].num);
; x' `4 a7 V4 N2 p) o, i }
5 k N# x0 @' Y1 l& F9 M for(i=0;i<n;i++)
# C- j: z% B$ w {puts(stu[i].name);
; @: s" n, s* |9 t printf("%d\n",stu[i].num);" o8 |$ ^1 l7 {& q7 x- [
}
6 }' i, [3 q0 l1 q3 l$ v. Y return 0;
( h) B4 L/ ~' R( P; v& |* Q h2 s}$ K8 G7 G j$ F& |
比如我想输入第一个学生的姓名:s1,学号:10、( l3 z/ ^/ ?# p1 a) W# @ y$ Z
然后输入第二个学生的姓名:s2,学号:20.
% o) N# o( X! }7 l7 A- p6 O c但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。0 x% [9 o5 \: ]2 z
这是为什么呢?1 b6 ?' _) W/ l/ N/ O8 w' F* T) c: C
仔细想一想。0 G- m4 K& b5 f
最终才发发现了关键的问题:
, Z7 P, o9 w% ^# m在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
" H* e& g9 ~& a) F( `getcher就是用来存那个多余的回车的。
, E- E5 H: y# q' z# C1 z/ W原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。# V3 a1 R: I' R+ J1 Q
3 b! `# Q' }- t3 G! z: g
" X8 ?; P; w) A; U/ ~4 C
% m* l& i" n; i: Y. p4 u4 t4 K$ r% ~5 g+ S4 \
|
zan
|