- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。 y0 _4 ^: A# O3 @
初步代码如下:3 K9 R& d& K5 J- L
#include<stdio.h>" V, ~# j4 s e- }* C% e- Z
#define n 20 T$ r- [' i' y! W, g
struct Student{
1 s E. d' ?, G" T$ J0 V# v char name[3];
! q6 Y6 n; u" a! o int num;
# Y4 j* @8 S. p}stu[2];
) _4 i" N [) e$ j9 \. Y! Q \
, p. f/ X4 l+ N4 N& Jint main(){
* r+ X/ M. m& h- Z int i;- X9 c: V: e! f" z( n7 ~
for(i=0;i<n;i++)
# Z3 X- b9 Z, a5 _: I9 p {gets(stu[i].name); S7 ?. o" }) z9 l, L* i" U) V
scanf("%d",&stu[i].num);$ o4 K8 y( Q9 y
}- b+ ]& z w K7 @
for(i=0;i<n;i++)+ C2 k( `& E* V3 s: t5 f$ D9 x
{puts(stu[i].name);
9 w# n7 b& U8 ^8 j printf("%d\n",stu[i].num);/ `% E' V& B2 l' n; t+ w! H0 K
}
, |( f$ {) j" g. B5 _ return 0;
9 E2 f! A) r4 W+ D) y6 v/ I& ?}
' ~) l) `. m: \比如我想输入第一个学生的姓名:s1,学号:10、
* z7 ~( A! m, f: b V然后输入第二个学生的姓名:s2,学号:20.
( {2 _& N7 t- ~但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
" `( h6 @ K `, R这是为什么呢?1 F4 x s( U, X' U( c( S8 e# a
仔细想一想。
% W% s5 C. H D3 i- e+ t0 Y) R最终才发发现了关键的问题:3 U/ R1 E6 e7 ~$ A; I2 X' \
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。 J" M$ b' h1 b( {3 Z( Y5 ~3 f9 @4 F
getcher就是用来存那个多余的回车的。
1 q, g. r1 n" R8 w* r5 {* h原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。4 r l, G' y& p9 ]
2 W6 }! L1 S' _; e
0 L/ J! u+ Y }* S9 Q+ [* g V' S
% {) K& w- d' Z. F% m$ \ {" ~/ @; B% {- q0 P
|
zan
|