- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
# a. h9 N2 S5 j7 w P+ j: L初步代码如下:& c) { k& F3 }! Y+ P5 \
#include<stdio.h>
; B+ K1 d# F! ^. T. A#define n 2/ G6 x! [7 L3 u) Y7 W; w
struct Student{8 O( |+ V7 l0 f. d# U6 p- M x
char name[3];
% g |9 ]4 Z) a: T% ^% W# V6 Y int num;
4 U9 q ]+ z9 v5 _" r( v3 m}stu[2];7 y# l: B! f+ l1 l. C
& b' Q- O7 ^! P2 _5 ?+ Y, f& f
int main(){
; h: C0 V0 L- n2 n+ n int i;
+ r" {% F' a$ T4 C# X for(i=0;i<n;i++)! _9 {$ R, [/ [; E6 p' a% ]
{gets(stu[i].name);
7 V1 h( k% t" N% C$ P scanf("%d",&stu[i].num);" {1 H! {( a# w
}- r' c1 O* [! k: j& ]' P
for(i=0;i<n;i++)* `9 }; E( n' Q; l3 P. }1 ?
{puts(stu[i].name);+ C4 Z N; D# m0 m! V; ?) |3 a1 y
printf("%d\n",stu[i].num);: J% J8 }2 T2 q/ O6 N
}
- v& j# \5 g8 j return 0;- S' f- b0 n/ O% g! ^& a, E
}. e9 }, R0 w, E- ^4 `& ?. y
比如我想输入第一个学生的姓名:s1,学号:10、3 j/ D# G! \; S' X3 w/ X. k
然后输入第二个学生的姓名:s2,学号:20.
9 j2 f% d, s" ^- Q) l6 ?; f但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
% H+ I+ b3 r9 P) a5 n4 Q这是为什么呢?
9 G/ Y- \* w1 M) w, d7 Z' [仔细想一想。- E' W {" h& ^ S5 }
最终才发发现了关键的问题:! ~: N. e7 T9 d6 v% b. V
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。% f# t# O! {3 A' S- Q3 X T' c
getcher就是用来存那个多余的回车的。2 t, g0 |" A) v- F$ P5 D
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
& y0 C6 |# _& }. b
7 l6 x$ p7 P& _4 o
, |6 U A! d+ x+ M# u9 v, D+ v4 ]/ v$ y5 j8 V O
% A1 e8 V% T9 f: r ]5 m r" s
|
zan
|