数学建模社区-数学中国
标题:
数据结构之字符串学习感悟
[打印本页]
作者:
慢跑20
时间:
2014-2-25 22:51
标题:
数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
. v, p( ?. j2 s) {6 J
初步代码如下:
, D+ [1 e1 X7 G
#include<stdio.h>
- W# @8 f6 D& E! W: T* r- G( I) l& u
#define n 2
( F5 P9 L" D% {- G8 C' S6 U
struct Student{
( o2 D( v1 W9 _
char name[3];
5 @2 m/ }5 Q ~3 x7 g
int num;
- |4 c( @+ k) B
}stu[2];
4 q4 K# H3 ^' B! F9 P E8 }0 M! X
, O2 k2 H* ^0 A1 F" r1 N
int main(){
. ~1 ?" w0 r. M- Z4 Q. k
int i;
7 }3 \1 d9 e; h3 e: ?
for(i=0;i<n;i++)
% x- ?6 r e2 J! x
{gets(stu[i].name);
* p) t: ]4 Y! [
scanf("%d",&stu[i].num);
) M, X" t* E8 F, D7 Y, q Y- }3 {
}
8 }6 b2 f- ?% G* p% Z& B" S" H* |
for(i=0;i<n;i++)
2 [ Q) z5 l! C+ r( y
{puts(stu[i].name);
: r% X# _! A. S3 _* n4 M
printf("%d\n",stu[i].num);
1 t# y3 P- o1 A
}
9 O( |3 f7 K9 I- r, p
return 0;
/ A( O2 B/ M' Q7 y5 Y7 b
}
, H1 j" o; f# e8 h, f& `
比如我想输入第一个学生的姓名:s1,学号:10、
8 j6 G% i* Y* @1 m
然后输入第二个学生的姓名:s2,学号:20.
. o9 d h# o; ? n$ a" i
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
+ v# a$ R2 S% S* F) _" h
这是为什么呢?
6 O) e$ j! P; t3 |; c+ C- V
仔细想一想。
, [% F; Q. x/ z4 o
最终才发发现了关键的问题:
- ~: g1 [4 ~6 Q& j( K& L& g
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
/ p( i+ ]4 H+ F
getcher就是用来存那个多余的回车的。
0 ?( ^, @7 W! `, R) V4 N
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
( l0 n( v G3 J8 \% R" O' s h
& k# [0 s" O& N
; q: D& J m4 W! ]
% G& M" K& V2 W2 m1 p$ `. |
3 k% O3 Q3 d5 \- d& ~$ i5 W) V$ Q% J
作者:
sdccumcm
时间:
2014-2-26 11:47
支持个
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5