下沙论坛
标题:
basic_ifstream tellg ws
[打印本页]
作者:
BCGSoftBug
时间:
2006-3-19 18:34
标题:
basic_ifstream tellg ws
平台: Redhat Linux AS 4
" G7 ^# d0 u& i9 Z/ Q' Z
编译器 g++ 3.2.3
$ T. Q% y6 h! |# }( N; w( g, J
输源代码
- y5 Z* i" [3 p) Z# o5 s4 h
#include
( g" Q! F" Y2 d9 w2 M7 I
#include
' X1 I/ @. S# f9 Y! {
#include
2 P/ R0 j( h+ r& ^
#include
/ A9 j/ M0 I9 B2 t% l+ {
using namespace std;
0 Z! q, U Q- Z" h3 a
int main()
( X) K7 F& ^3 [
{
7 Z# |* j7 d% S6 b5 b
//cout<<"Hello World\n";
4 {) o8 x* ? ?' J: s/ F
4 i) |9 R1 N1 ~! w( B* C. B
//block until user types something
1 B5 E5 y9 x7 C7 E
basic_ifstream
fi;
/ U a4 ~0 b2 I* X' B
wstring s;
3 {3 \! S/ J. u9 M$ y9 ^' W
fi.open("/root/workspace/test/123.txt");
2 E5 n! t7 h$ a* \
cout<
! F8 }! v: V( \/ m+ d% ?) L ws(fi); //去除空白
( y }7 x6 j5 e# x% B9 C
fi.tellg(); //读一下下一个读取位置 [U]没被注释掉[/U]---〉第一种情况
. U# p: t/ P' t; x( {1 W
[U]被注释掉[/U]---〉第二种情况
6 k( B, l* K2 ?9 N# d
getline(fi,s); //读一行
9 s; m# ~- D# G
wcout<
N6 u* F% T& Q" Q fgetc(stdin);
5 m4 N& l4 I$ {. W, d4 r" a
return 0;
7 r, q6 v/ w; b0 ?' }( J
}
1 ?( I+ w8 c3 p1 T
/*
+ `. O9 j% r$ F) O
123.txt内容在下面一行的引号内,引号内第一个是空格
% N. o7 L9 t0 q+ v# V/ X9 s
" #define"
3 c1 j/ b7 S; L4 E+ _3 b. V2 ^, n! }
*/
: C0 q$ C( n0 w
输出
! Q# R' l2 J- y/ V: P1 H% `
(第一种情况和第二种情况都是下面的样子([U]#前面没有空格[/U]))
9 f% P* ^4 _# X9 v7 U" [+ _
1
6 s* c- Y, I7 `: _; M
#define
; E. Y, @2 ?& U2 z. D; s5 m% `* l
///////////////////////////////////////////////////////////////////////////////////////////
. T2 X* w0 _+ e# f! e. N1 r1 {
平台: winxp
( {1 R. O$ J# f( ^
编译器 [U]ms ml 8.0.50727.42 (vc++ 2005)[/U]---〉情况A
. h- w: G2 v! H! U4 L
[U]ms ml ????(忘了,就是vc++6.0的)[/U]---〉情况B
/ P! E# F0 e5 C( Y% ]7 b8 h1 c
输源代码
3 R" b+ ~. E/ @0 U/ u0 C
#include
7 z+ y5 P" O. i) w& V& s) p
#include
U A* K4 E2 ~4 W
#include
# x9 F5 {+ i. e: V7 p) ^' g
#include
}5 [' p4 b ~3 T( v! e% q. X
using namespace std;
7 |1 H- o9 ]. [
int main()
) O# g* r$ C2 h( B- l5 C4 j
{
% T6 |9 Q; }" }2 d; \
//cout<<"Hello World\n";
- R) w; T! m* X5 X1 I9 `3 K; N h
' @+ u1 @% p5 `- a: ?
//block until user types something
3 s4 R6 V* D' C6 @
basic_ifstream
fi;
) s. U, E& V) E0 @ x3 h
wstring s;
1 v. e3 j6 q o
fi.open("123.txt");
- _# ?: e/ q9 a$ i
cout<
% A- f8 I* z" r- p1 M& d ws(fi);
% `5 C- o& ~* w' s2 K( Q
//fi.tellg(); [U] //被注释掉[/U]---〉第一种情况
2 g. @9 {% ]9 s2 O: e
[U]//没被注释掉[/U]---〉第二种情况
% ^6 e8 ~0 l+ ^ v, z' M; M. b# e
getline(fi,s);
, U3 c5 l; B! m. D* E
wcout<
1 U$ |/ V/ ~8 p" l fgetc(stdin);
/ K9 A. ]- n- I) E9 ]1 t8 ^ T
return 0;
2 D& U9 @! m, Q. |) H3 o
}
) L8 \ }9 r- h) E( r
$ D+ _5 F/ n: L- |$ b
/*
2 Q' N5 b- e' x- h4 D8 B2 h
123.txt内容在下面一行的引号内,引号内第一个是空格
6 }8 z+ P! Z7 [7 V
" #define"
5 C" t# o/ B; S/ B: A) L4 p
*/
0 O7 R6 K3 m9 _7 w! E
输出
* y; R7 t7 u6 c% [) {
(情况A+第一种情况)
) {. y3 m0 i* Y. y" z: c
1
9 B* V# B p% J3 n6 l: {4 ]% h
#define
, h$ W' V3 \) d: `& Q
(跟g++一样)
3 N& S" Z; J. H; x% e d
(情况A+第二种情况)
" d5 t2 f7 u/ J6 l/ g$ G, y) D7 i
1
1 C% O2 v5 H- x* ?- f
define
! V) S2 f# g3 m# p! u! ~
(跟g++[U]不[/U]一样,少了#,是tellg()导致?)
3 O! M2 Q( g' T
////////////////////////////////////////////
4 B3 R: ~+ J: Q" E1 |; J' Z! }8 e
(情况B+第一种情况/第二种情况)
( o+ a) G1 O% W4 l6 U8 N9 t, F0 @0 L7 K/ R7 \
1
" p( d4 {8 ^ L7 L! z
#define
7 e1 P8 D1 i6 p% K
(跟g++[U]不[/U]一样,#前多了空格,ws没作用?)
5 s% F* d* n4 B$ Y/ L* u
//--------------------------------------------------------------------------
( G5 z/ P% G2 I$ d; R6 K+ ^0 F( c
评价如下:
, q% b6 N8 P* ^/ |9 f% e
按照理论
8 v! ^' R: c s+ g+ l) B
g++两种情况下的输出都是对的
3 N$ m* u5 I- A7 V2 }. g
vc++2005只有第一种情况对
9 V) \; _' g* p2 V/ T
vc++6两种情况都有问题
" K% V3 o, q8 S' F* w) v
现在的问题是,这样的评价有没有问题,输出为什么不同?
# T6 n( m; H. ]/ n
(本人希望得到g++的输出,根据文档就应该这样)
作者:
Eagle
时间:
2006-3-19 21:33
代码好多啊,我最近眼有点花,飘过。
作者:
BCGSoftBug
时间:
2006-3-27 22:10
难道就没人碰上过这个问题??
7 |) K, p1 Y& T% f2 ?3 n
注:
$ x* C8 N& o+ x0 o& s5 t
1楼帖子的内容显示是有问题的
! M6 Y6 Y/ ]* r- W! m: \
比如“#include”,后面的内容显示不出来
# ~7 h r5 L% `
比如“cout<”,后面的内容显示不出来
欢迎光临 下沙论坛 (http://bbs.xiasha.cn/)
Powered by Discuz! X3.3