- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。) I( c' m( d0 C
初步代码如下:8 J2 _% M. a3 U+ Z- ~% i
#include<stdio.h>9 \* c" q+ r% m1 V
#define n 2( o2 @+ P& s5 c: v' L4 E6 ]+ O
struct Student{
/ ]! j' t% A6 V- [0 _6 ^# ` char name[3];
9 N! ]- v7 H: r( B- }/ P) L7 O( d1 v int num;
& J, p: _2 K( r9 S}stu[2];
# J! {7 C8 o5 ?( T. k% @* F3 i
- M7 T N3 Z, ?; R4 V vint main(){
% q0 B8 u* s$ j& _1 ^0 l int i;
% h* @; p9 o5 D$ w1 ]& g for(i=0;i<n;i++)
6 p! A9 R9 k' ] {gets(stu[i].name);3 a" M3 O+ S+ O' p2 r
scanf("%d",&stu[i].num);
% o: u: X. G3 C4 {6 h }
, c# I( i9 Q) Y9 Q for(i=0;i<n;i++)
/ c& n5 s, c: |9 _9 X {puts(stu[i].name);
0 K8 x& ~/ Y) J* r! z, f printf("%d\n",stu[i].num);1 f3 m/ e+ @- O& {2 z' \# J/ d4 b
}
" z- ]- j2 L( h& S return 0;& @1 {1 e& o9 ]+ v
}3 h7 k1 D3 E' X; {
比如我想输入第一个学生的姓名:s1,学号:10、5 b6 r, p) @- x; \/ ^" C
然后输入第二个学生的姓名:s2,学号:20.$ R0 k) A. D! ^. h, Y; n+ i$ m
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
# D) Q9 l$ ?7 Y0 x8 r t这是为什么呢?
+ h+ x5 t1 j; @) @; \; P仔细想一想。
+ G* n. ?5 I$ Q' K, f最终才发发现了关键的问题:
% ^$ I; R2 ^$ U3 k$ m在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。9 s& l* `! ]( h
getcher就是用来存那个多余的回车的。
4 \- N9 m" y# C# O1 H, f原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
& R; P. d; ^ W/ S8 m3 [# y6 g# @" U
2 H m2 f, d. M7 k2 ?! Z1 g7 \3 `! Q) F7 h. B" C
7 X( A. h7 T! y8 J; e8 _- n& |
* h% H! i) a& t) k% a/ l |
zan
|