数学建模社区-数学中国
标题:
数据结构之字符串学习感悟
[打印本页]
作者:
慢跑20
时间:
2014-2-25 22:51
标题:
数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
. F q! r7 X* N( I3 `" O, E
初步代码如下:
. u8 y- f X4 j: k/ m5 |" g# x) ?# g
#include<stdio.h>
* H# R1 |- b: G% V5 R0 G
#define n 2
8 f. ]% K6 l. Z
struct Student{
( a7 y6 t: g9 B% B4 Z
char name[3];
$ i! K0 |& F' q
int num;
?& p4 s& s, [
}stu[2];
8 h1 r: F% {) H
. ^2 | {7 V5 C% j1 Q; D+ N9 ]
int main(){
; X t% n" _6 z7 `
int i;
* h q% w& ?. r8 w
for(i=0;i<n;i++)
& n0 L3 ]- U6 y1 Q( R+ H$ O
{gets(stu[i].name);
e6 l: U$ s! j4 L8 @
scanf("%d",&stu[i].num);
! j" g# ~, w F& q
}
1 |) w% U4 o2 {* ~) K5 P
for(i=0;i<n;i++)
8 Z5 ~% b, T0 i- w( n
{puts(stu[i].name);
! f2 O! J& `; _. A% K1 O0 i, i$ l
printf("%d\n",stu[i].num);
6 s& T# G7 Z3 ^; H$ U; o
}
1 }5 o& t6 _& q# l* O4 B: X
return 0;
+ J7 b2 F/ @# j
}
9 s* h& o' x2 \4 u0 U
比如我想输入第一个学生的姓名:s1,学号:10、
, H$ F4 `0 l1 Q) p8 u4 u
然后输入第二个学生的姓名:s2,学号:20.
5 c' \: e$ y: r: E4 g& Q
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
) U" ~2 `2 B3 ^" b! Z1 q
这是为什么呢?
" E8 }0 M7 d$ }/ D7 S4 l! q: e3 j
仔细想一想。
$ w- G! v$ z; x6 l. D% y! D6 h: v
最终才发发现了关键的问题:
1 o% |+ e7 L; x+ _, e& R
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
& c K6 x1 A& F! T2 c. [
getcher就是用来存那个多余的回车的。
3 C+ B& o+ a7 ?. ?
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
3 u, x( p* B) X/ x, |
) T9 i, z! W- P' D" @7 \) | E9 v& M
6 T, R2 ^% M5 v) Z: t. J5 b
( y$ Z5 m8 n u8 j5 a0 J& B
( r9 A7 m$ g+ u
作者:
sdccumcm
时间:
2014-2-26 11:47
支持个
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5