- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
1 v& O5 R0 W, }7 C初步代码如下:# S/ Y+ O/ b# a9 O
#include<stdio.h>; m1 N, { y8 a0 }
#define n 2
1 m7 g. l u' Y9 ]7 M1 v! \0 vstruct Student{' m0 g1 Y% L) i8 s- q9 J. t7 `2 Y
char name[3];9 f" u' |/ `, B3 |+ M* Z1 Z0 D6 A) I
int num;) k" v' @3 r* q ?" K% e6 H- S2 x
}stu[2];. f# f7 C5 @# d4 h
1 B: S0 s0 h$ ]( [" _9 E. iint main(){. `- P: d/ g" z$ u, O, x3 P( Y1 F
int i;1 X' c* W8 g0 V
for(i=0;i<n;i++)
' h& O/ [% w" Y- S# { {gets(stu[i].name);
; } B! l4 c9 J7 m9 x* u+ B/ l scanf("%d",&stu[i].num);& I# m. X; T/ O6 E
}
* N1 D( L# @1 ?2 [' A$ m- ] for(i=0;i<n;i++)7 O1 y0 ]" P6 R3 Z9 u9 ?- v. g
{puts(stu[i].name);
& w6 [- ~+ @ w5 Y: T' R printf("%d\n",stu[i].num);
- U, T% n; m: q& V$ c8 j3 ` }
; S) R8 i: m* o! ? return 0;: Q7 C3 s/ D- \9 F6 M0 X) l
}
& s9 a- Y4 ~0 v5 r+ e2 S2 o2 p" z2 o比如我想输入第一个学生的姓名:s1,学号:10、6 |; c; P1 m& O" G6 Y/ n
然后输入第二个学生的姓名:s2,学号:20.! F' I+ T2 F6 g9 Y* o9 ~) z' s
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
0 k7 D7 Z" `% q* k" s+ E3 Q j这是为什么呢?3 e/ y, k1 |$ T/ u
仔细想一想。- W- A' N1 v5 }
最终才发发现了关键的问题:
. K0 r! o1 N X, @1 F在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
! ~0 O( g" O1 ^1 ~, ]( {getcher就是用来存那个多余的回车的。
5 B! `! N6 a4 V- Q5 N原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。4 h/ g5 C5 o& V
& D$ x. J! D/ O+ B/ M# E& ^ L& G% C1 H8 V6 N
) g) Y: Y$ K0 `7 W( B: {" A
* l) G; I7 I/ s1 _ B2 q
|
zan
|