数学建模社区-数学中国
标题:
数据结构之字符串学习感悟
[打印本页]
作者:
慢跑20
时间:
2014-2-25 22:51
标题:
数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
1 g9 [; H- I8 u& B9 }
初步代码如下:
+ p8 Y. e% E+ @7 z/ C0 P+ f! u( _- {
#include<stdio.h>
9 Y% x! T* {2 m/ ?! a1 V
#define n 2
. Y/ x1 x( p; d( F. f" r4 M
struct Student{
! N" F/ C( A' o8 I5 t7 S
char name[3];
4 m2 T6 f5 v7 x5 _( G
int num;
" H, z1 l4 m% _
}stu[2];
- O5 D/ w' I, t9 t, i
% y, `( l0 O7 u" `% o+ ~
int main(){
P! Q# ?" S' u
int i;
b2 o0 E5 u5 r6 C
for(i=0;i<n;i++)
" o; k5 ?4 h8 Q8 v0 ] v& w
{gets(stu[i].name);
5 i; Y1 N: i: m- U" Q
scanf("%d",&stu[i].num);
) [5 b7 |( j) N6 _6 d
}
3 x) S3 Y( t. i( t- ]
for(i=0;i<n;i++)
, r- H7 x& V* h$ P8 k' r9 O
{puts(stu[i].name);
( i9 q/ |, B& J: y b
printf("%d\n",stu[i].num);
1 a! M. a3 M0 N+ |) d: h
}
6 o# f; q% @/ e
return 0;
% b" E, y' e4 r. s% a
}
]1 s# [8 m( C# Z$ j
比如我想输入第一个学生的姓名:s1,学号:10、
# V7 ~2 C# j7 r7 o1 X y
然后输入第二个学生的姓名:s2,学号:20.
9 d: Z; T( D( f, ?, l( n/ K8 }
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
2 E0 a7 r% ?" w. o* b
这是为什么呢?
2 S3 W8 y4 W$ Q: i. L6 A6 g5 X
仔细想一想。
0 \5 g* Z4 ?1 I' B) C3 O
最终才发发现了关键的问题:
k) J m( z) f [2 X# |6 n9 W
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
- O: S8 j& x5 Z; e
getcher就是用来存那个多余的回车的。
" k0 \0 [2 F6 J& E0 L Z/ L( b
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
. X! c2 L K9 z1 ^/ a' [6 q
; \% s$ R/ F5 j2 T
- E }* `1 @! {* j8 u) `
3 u7 O* x8 m9 }4 W
: @8 @5 [: H/ @
作者:
sdccumcm
时间:
2014-2-26 11:47
支持个
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5