关于COUT设定输出格式的奇怪有关问题

关于COUT设定输出格式的奇怪问题程序如下:#includeiostream#includeiomanipusingnamespacestdintmain

关于COUT设定输出格式的奇怪问题
程序如下:
#include   <iostream>
#include   <iomanip>
using   namespace   std;
int   main()
{double   a=123.456789012345;
  cout   < <   "(1) ";
  cout   < <   a;
  cout   < <   endl;
  cout   < <   "(2) ";
  cout   < <   setprecision(9)   < <a;
  cout   < <   endl;
  cout   < <   "(3) ";
  cout   < <   setprecision(6);
  cout   < <   endl;
  cout   < <   "(4) ";
  cout   < <   setiosflags(ios::fixed);
  cout   < <   endl;
  cout   < <   "(5) ";
  cout   < <   setiosflags(ios::fixed)   < <   setprecision(8)   < <a;
  cout   < <   endl;
  cout   < <   "(6) ";
  cout   < <   setiosflags(ios::scientific)   < <a;
  cout   < <   endl;
  cout   < <   "(7) ";
  cout   < <setiosflags(ios::scientific) < <setprecision(4) < <a;
  cout   < <   endl;
  return   0;
}
运行结果如下:
(1)123.457
(2)123.456789
(3)
(4)
(5)123.45678901
(6)123.45679
(7)123.5
Press   any   key   to   continue

这就遇到问题了,(6)和(7)在程序中已指定用科学记数法输出,结果应该是
(6)1.234568e+002
(7)1.2346e+002
但实际输出却不对。

如果将程序写成:
#include   <iostream>
#include   <iomanip>
using   namespace   std;
int   main()
{double   a=123.456789012345;
  cout   < <   "(6) ";
  cout   < <   setiosflags(ios::scientific)   < <a;
  cout   < <   endl;
  cout   < <   "(7) ";
  cout   < <setiosflags(ios::scientific) < <setprecision(4) < <a;
  cout   < <   endl;
  return   0;
}
却能得到正确输出:
(6)1.234568e+002
(7)1.2346e+002
Press   any   key   to   continue

编译器是VC++6.0   ,系统是WINXP   SP2。
请问为什么会出现这个问题呢?如何解决?
THX!


[解决办法]
C++ primer:
与其他操纵符不同,不存在将流恢复为根据被显示值选择记数法的默认状态的操纵符,相反.
我们必须使用unsetf成员来取消scientific或fixed所做的改变.

意思是,你之前这句:cout < < setiosflags(ios::fixed) < < setprecision(8) < <a;
后面要加cout.unsetf(ostream::floatfield);,否则设置的fixed不变.