下沙论坛
标题:
basic_ifstream tellg ws
[打印本页]
作者:
BCGSoftBug
时间:
2006-3-19 18:34
标题:
basic_ifstream tellg ws
平台: Redhat Linux AS 4
- ]' u4 q+ ?( ?0 U* ?6 T$ b
编译器 g++ 3.2.3
# a$ t1 `/ N% a# H
输源代码
: H& L5 @% I/ ^6 [* S# z
#include
( p# }% z1 c1 L( v7 ?; t6 P% [
#include
& E: a! D( U6 |& W' E, `
#include
, h' M _9 j( w' [, F
#include
6 ~3 o2 U: R2 M; w
using namespace std;
. h4 {$ b+ S: }/ y
int main()
1 ?; K4 ?: r& f3 C9 z
{
& j" f* ~! r- N
//cout<<"Hello World\n";
2 m4 t* k, Z* E' M' b* W" ]
+ d1 C d0 R! a( g7 K1 w
//block until user types something
. }; g& v l9 K' F; W* g
basic_ifstream
fi;
, K7 R6 i1 }$ n- y& {0 m8 V
wstring s;
" A( i. L% a3 w. N# a
fi.open("/root/workspace/test/123.txt");
4 D1 ?$ |; d2 L8 D% r
cout<
9 V! }5 \ H: t( M8 y ws(fi); //去除空白
, L$ a J- T" }# J5 s
fi.tellg(); //读一下下一个读取位置 [U]没被注释掉[/U]---〉第一种情况
1 v. L0 ]9 {/ z0 x9 |
[U]被注释掉[/U]---〉第二种情况
% s7 z- \& D# c7 w( L) A* x( u
getline(fi,s); //读一行
: H5 A1 s" W" V& t
wcout<
3 X1 N# H3 e9 @/ r X5 b2 _ fgetc(stdin);
; q1 o7 _/ Q( ^; I) D* P2 w& ^
return 0;
* Q+ X/ }1 m+ r5 H+ F: m
}
$ R8 y4 z( E1 ?! y# v8 K
/*
5 o; V3 X* \3 ?( ~
123.txt内容在下面一行的引号内,引号内第一个是空格
: k( T% l$ q; |3 e
" #define"
# u, }2 r/ B0 G7 y: U1 o `& r9 Q
*/
4 }) Y( _7 i+ s' o( i' X
输出
; Y+ q( G7 q; F# l3 [1 R
(第一种情况和第二种情况都是下面的样子([U]#前面没有空格[/U]))
- k$ E7 E# \: v
1
/ f. |7 o0 V; e( O
#define
5 u: R3 m6 b6 c8 |; J* R
///////////////////////////////////////////////////////////////////////////////////////////
7 i' b" y/ p8 V' W0 i9 R# e1 b' D
平台: winxp
. S9 Q" C- I: n& {6 ]& m6 v3 K# y
编译器 [U]ms ml 8.0.50727.42 (vc++ 2005)[/U]---〉情况A
- o# B7 W: L$ l3 G8 `+ g- E
[U]ms ml ????(忘了,就是vc++6.0的)[/U]---〉情况B
2 k! Z- j1 X. m- H% `
输源代码
/ J2 @5 f5 }" n8 M2 C% h# ~* N
#include
2 R" ]. T8 `) c6 s* [' z, L$ t
#include
/ Z3 [0 F S* y8 v2 b# E
#include
0 Q v$ S1 u: m1 w( Q+ l
#include
2 Z" y6 K4 n( ~8 u
using namespace std;
6 S3 q& k: I2 L: s8 G& y5 E. y0 ~
int main()
, S6 M* f& N* z& G' @: @9 S
{
% l4 D$ `+ R' R8 O5 q
//cout<<"Hello World\n";
+ ~6 D, w/ P! m7 e3 t
P5 D( w( g' u8 V! L; s
//block until user types something
0 J7 Z9 I1 z8 [$ C- X9 R" z
basic_ifstream
fi;
3 a' _: K. J2 x- H s* u1 O
wstring s;
$ E( N2 A% ?/ _, ?4 g
fi.open("123.txt");
2 Y3 K' M, o$ Y+ x# `. }& O
cout<
/ V$ \/ r6 [5 _" o3 u* P5 x ws(fi);
# N- v* b+ e& f Q9 T* ]" }
//fi.tellg(); [U] //被注释掉[/U]---〉第一种情况
: k$ c, t t+ e4 r+ @
[U]//没被注释掉[/U]---〉第二种情况
+ ]3 Z' h% u9 a H2 @. B; B0 F
getline(fi,s);
9 k% }7 z; L/ s6 S! f
wcout<
. s, S3 e6 }0 J% L fgetc(stdin);
% s: @2 `" Y& n3 o" H
return 0;
( D# J: K! C- o( A+ ^7 `
}
; r2 b( @ }- J9 y# S# \- b
7 y, Q: N7 d$ W& V
/*
; ^1 j3 y8 R, K. Q! O# A( [
123.txt内容在下面一行的引号内,引号内第一个是空格
- E+ R) \ R$ G d0 q) M2 h
" #define"
0 f; @, u9 m6 i0 n
*/
6 @1 y! _" @6 w i+ g: k2 Z
输出
/ z3 x3 G/ Q. K
(情况A+第一种情况)
" i8 m9 j' G2 i: y- |( M
1
# M5 s, j+ ?; X( l0 G& B) E
#define
7 o! M, q: m+ r! I5 f4 e. a
(跟g++一样)
) V& N8 {5 F- A% O, b6 {' n
(情况A+第二种情况)
/ v1 G0 X/ q5 _/ |6 s! b" n
1
- t( A8 W [/ U$ ?' z D! y3 K* o
define
+ O: _0 w l. e7 V( L, `6 B' h
(跟g++[U]不[/U]一样,少了#,是tellg()导致?)
: n+ t8 T+ D" b# `" a: D
////////////////////////////////////////////
. ?5 M% j2 B' s& u; i
(情况B+第一种情况/第二种情况)
4 c& v1 I- s; t8 U; j8 _3 g" T
1
( K$ O, ]2 O. J8 k$ U2 r
#define
- k# x" ~. R: ]* q9 X
(跟g++[U]不[/U]一样,#前多了空格,ws没作用?)
% v' l/ o- x" s; O! F% d
//--------------------------------------------------------------------------
% O* s3 g7 J, a2 X5 M5 K+ P Y9 Q
评价如下:
5 }6 X. L& h# ~$ r% e% ^; u
按照理论
( W- j, T, a! i) B9 T) z" }
g++两种情况下的输出都是对的
! U* ?. W0 `- s" T9 d' x
vc++2005只有第一种情况对
/ o" f' p; U6 t( [2 \
vc++6两种情况都有问题
7 g8 U) p6 D# U) c" s. p6 P H% M ?
现在的问题是,这样的评价有没有问题,输出为什么不同?
$ F: o$ D2 O7 V. [$ t- L( b3 L
(本人希望得到g++的输出,根据文档就应该这样)
作者:
Eagle
时间:
2006-3-19 21:33
代码好多啊,我最近眼有点花,飘过。
作者:
BCGSoftBug
时间:
2006-3-27 22:10
难道就没人碰上过这个问题??
$ W1 z* q2 o: l& f4 v4 [
注:
) A& _& \7 c8 ~/ e
1楼帖子的内容显示是有问题的
# J8 q& l3 L* @
比如“#include”,后面的内容显示不出来
- ~1 S; ^; N1 j* ~/ T
比如“cout<”,后面的内容显示不出来
欢迎光临 下沙论坛 (http://bbs.xiasha.cn/)
Powered by Discuz! X3.3