- 在线时间
- 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题讨论群组 |
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
. T( i# f0 V; @2 e, y* ?3 e初步代码如下:8 X/ Y5 L$ U9 x( l# {
#include<stdio.h>
, M6 h5 D* v8 u m+ q, e) n; z#define n 2( s9 N+ T! O# {4 B; e
struct Student{
1 k$ H4 a( T2 f; J, L0 M char name[3];* r }' b5 t2 a0 K3 R
int num;
6 F V2 x4 X" e}stu[2];
- h3 F5 |7 D6 a O* l$ p8 I; ]6 D$ b: _$ o: ~. d
int main(){3 L9 @- K. z( D6 T
int i;7 u8 F4 W; U+ O5 z: X4 S
for(i=0;i<n;i++)
; p6 y1 E6 P! Z8 R) b0 J/ g0 f {gets(stu[i].name);
. B* r4 {& L+ h# _; L scanf("%d",&stu[i].num);
& c1 X y, ^8 S' N( f }
. @( T( h& F+ p) p2 u* h' l+ N for(i=0;i<n;i++)6 k% f- e8 G, g2 Y
{puts(stu[i].name);3 E W% V/ T+ C# K( s) T
printf("%d\n",stu[i].num);
6 A3 s3 ^) u g2 y& T; x3 P$ g }0 g2 D/ |5 Q0 ~ j
return 0;2 L6 l! ~8 L' L& f+ k
}$ k1 b: |5 B* r1 w5 [ c
比如我想输入第一个学生的姓名:s1,学号:10、
$ ~" a$ R7 E+ m9 w( \" R然后输入第二个学生的姓名:s2,学号:20.: n2 p% o9 w. K7 d9 c; x
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。/ t3 B' {. A$ N& e$ w- Z! a( }! Z$ s
这是为什么呢?$ ~; h0 ]1 Y9 ]! f _( z0 M' b6 x3 h
仔细想一想。3 s9 Y! u, m0 U: H W3 [1 U6 |9 W
最终才发发现了关键的问题:. h0 J" K& J! x- U
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。7 `6 I5 c& W9 ?( X9 S
getcher就是用来存那个多余的回车的。$ n: g2 ^) b& P; o& Y
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
, a5 B/ r% V, w5 F7 V; S6 v! p, {) |3 w7 ]$ Y" O
- f3 s: S2 A5 r5 Z% R7 s! a) S$ ]* x; n& x
( B1 n: x& @5 r9 @, g% L2 Y( c/ S |
zan
|