- 在线时间
- 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* D0 Y, {7 w. s. e0 I; \初步代码如下:
9 e& s# \' q8 h6 b#include<stdio.h>& Y& Z: w( W4 f: ^# [" e. M. _
#define n 2
9 e0 x/ @& T* c6 R7 I' h2 Estruct Student{: l. B, r( L( j# F$ }
char name[3];
8 z3 ]% A' e5 k0 O$ m int num;
( l2 y: ~" k2 o- v}stu[2];
' Q5 C! b; I1 \
( x: `% q+ I+ z, n1 u. o" V4 N1 s sint main(){: L3 c) N- D+ f4 G2 Y
int i;5 U o" E+ z7 I4 [4 }
for(i=0;i<n;i++)! D% i* s1 _: P! x1 b) V V7 g5 O
{gets(stu[i].name);
! `. P3 U, E( K: N scanf("%d",&stu[i].num);9 @* V/ ~! k3 g' p3 f0 h
}
" ?( k& F2 J2 W' o0 |2 X! \/ A for(i=0;i<n;i++)5 i5 l3 C' q1 @5 j- b; M5 X
{puts(stu[i].name);2 m+ N' R& u7 u4 U" z; \. R
printf("%d\n",stu[i].num);/ D9 S) q; f. Z" R+ @# v" f& _* ^
}
6 V7 b4 a% v" T! ^* \ return 0;/ C$ w2 l0 P) {. ^8 B
}
. n( D1 c/ F* X* H9 B比如我想输入第一个学生的姓名:s1,学号:10、) d1 f% S& R/ s+ }. T: W. ]
然后输入第二个学生的姓名:s2,学号:20.
3 y: R* I4 w; N1 }% ]: u9 g但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。3 ]1 H" J0 e& F2 p' P
这是为什么呢?6 u$ f* _ H' P% B. n6 o
仔细想一想。& O6 [ A8 X" V- L
最终才发发现了关键的问题:, B* f" @& s- s/ v& I
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。' a) X( U4 A+ j/ W! o' R
getcher就是用来存那个多余的回车的。
( s; z1 V; `, b' C- n0 m) H原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
6 L' L# o$ K. B% a' V+ I! O1 f; M3 T% z9 P+ }# C0 L2 u8 p9 C
5 L* D3 O, Y5 a# U2 E+ L2 a; B$ u" u" Y- e- S
' E @$ T$ M$ U2 _ |
zan
|