数学建模社区-数学中国
标题:
数据结构之字符串学习感悟
[打印本页]
作者:
慢跑20
时间:
2014-2-25 22:51
标题:
数据结构之字符串学习感悟
数据结构第一章第一节讲了基础知识,涉及到一个小程序:输入学生学号、姓名,并输出。
; A+ L2 A( e! m
初步代码如下:
- F9 c7 Z/ A0 K$ D+ s- e
#include<stdio.h>
9 |2 [# k' f; m. ]2 |, V, J$ q
#define n 2
4 c w9 j$ T# @, h+ r z
struct Student{
. U# C* o: W+ P$ B
char name[3];
1 b K2 R# T1 R8 ]7 I$ W: |3 ]
int num;
7 K% S- |0 z' D' V- p2 T7 j
}stu[2];
" t& R0 X7 {/ V& s V# y" l
' ~6 d& K8 Q; n6 a4 n, r9 B
int main(){
b9 W @& F' P
int i;
# g; i! Y$ j/ q: s; _* n
for(i=0;i<n;i++)
2 K# Z+ w8 K2 ? I$ h9 \
{gets(stu[i].name);
: @ b- f4 C/ a1 R
scanf("%d",&stu[i].num);
; Y1 |% E- n7 c) v9 |
}
5 O% L- J) `% x, ]8 o. a" k3 |
for(i=0;i<n;i++)
9 h4 ]& K' z. @' w; W
{puts(stu[i].name);
. Y& U% a6 m0 C- d" G
printf("%d\n",stu[i].num);
2 q' S1 S, a/ q5 t1 w
}
: H7 Z9 w8 _. A! u+ R
return 0;
; W1 b! D- I: n
}
3 h5 w7 \2 }' r1 d2 o2 c9 S
比如我想输入第一个学生的姓名:s1,学号:10、
* X5 @, O z2 o6 [6 v, ]. y& B
然后输入第二个学生的姓名:s2,学号:20.
* w2 @# Y6 u* O1 q H
但是还没有输完,只输入了s2,就显示除了结果,而且后边的结果不正确。
7 E ^" A4 v+ g E$ n
这是为什么呢?
' c& d9 `5 O6 E: W( {- O0 Y ]
仔细想一想。
n$ U5 i \# H$ g
最终才发发现了关键的问题:
- K1 z1 [/ b9 j& z9 Q
在输完第一个学生的学号之后会敲一个回车,计算机把那个回车当成第二个字符串存进第二个字符数组里面了。
/ ~6 n1 G" Q& e* k% [9 ?6 U* _' H
getcher就是用来存那个多余的回车的。
M7 }. D i+ @8 z+ T& _
原来,只需要在第一个循环,scanf之后加入getchar();就可以解决了问题。
6 ~2 D- O9 G) C H" }+ ~
! b* B+ e' O9 {% u8 h
1 L. G$ Z* j: u8 A9 g4 V
* ?$ h% N8 P0 m" U2 X3 z
0 M" x i( U! o$ E* G
作者:
sdccumcm
时间:
2014-2-26 11:47
支持个
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5