大家帮我看一下这段代码,看看问题出在哪里

puma66 2009-05-27 06:09:11
加精
这段代码是取得操作系统的版本号,奇怪的是,明明是XP的,应该返回9,但返回的却是12,是Windows 7!Windows 2000的,返回的应该是8,但这段代码返回的却是10,变成Vista了!如果将Windows 7的2行代码去掉,XP取回的值就正常了,是9;如果将case 6下的代码去掉,Windows 2000的返回值也正常了,是8。究竟问题出在哪里呢?

int __fastcall TForm1::GetSysVer(void)
{
int iOSV = 0; //用数字表示最终得到的版本号
OSVERSIONINFO osv; //声明版本结构
osv.dwOSVersionInfoSize = sizeof(osv);
GetVersionEx(&osv);
switch(osv.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
iOSV = 1; //Windows 3.1
break;
case VER_PLATFORM_WIN32_WINDOWS:
switch(osv.dwMinorVersion)
{
case 0:
iOSV = 2; //Windows 95 或 Windows 97 (其实就是Windows95的升级版本)
break;
case 10:
if(osv.szCSDVersion[1] == 'A')
iOSV = 3; //Windows 98 SE
else
iOSV = 4; //Windows 98
break;
case 90:
iOSV = 5; //Windows ME
}
break;
case VER_PLATFORM_WIN32_NT:
switch(osv.dwMajorVersion)
{
case 3:
iOSV = 6; //Windows NT 3.51
break;
case 4:
iOSV = 7; //Windows NT 4.0
break;
case 5:
switch(osv.dwMinorVersion)
{
case 0: //Windows 2000
iOSV = 8;
break;
case 1: //Windows XP
iOSV = 9;
}
case 6:
switch(osv.dwMinorVersion)
{
case 0:
if(osv.szCSDVersion[1] == 'S')
iOSV = 11; //Windows Vista SP1以上
else
iOSV = 10; //Windows Vista
break;
case 1:
iOSV = 12; //Windows 7
}
}
}
return iOSV;
}
...全文
871 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyxmgcd 2010-03-17
  • 打赏
  • 举报
回复
水平不够,看不出。
nanyida0416sushe 2009-05-31
  • 打赏
  • 举报
回复
好像没看出问题!
cuiyue1315 2009-05-30
  • 打赏
  • 举报
回复
谢谢了
armstrong1225 2009-05-30
  • 打赏
  • 举报
回复
学习了
风柏杨 2009-05-30
  • 打赏
  • 举报
回复
过来学习下。。。。
ajthjc 2009-05-30
  • 打赏
  • 举报
回复
学习
yoursrebecca 2009-05-30
  • 打赏
  • 举报
回复
那我也学习一下吧。。
egceo 2009-05-30
  • 打赏
  • 举报
回复
不懂C++,无法帮你。
JN_910711 2009-05-30
  • 打赏
  • 举报
回复
恩 有些case里没有breake 其它的就看不出来了 没写过这方面的代码
daydayup121 2009-05-30
  • 打赏
  • 举报
回复
顶!
hn1232 2009-05-30
  • 打赏
  • 举报
回复
break
gdbdzgd 2009-05-29
  • 打赏
  • 举报
回复
学习~!
tomerse 2009-05-29
  • 打赏
  • 举报
回复
学习ing
hanjialiang 2009-05-29
  • 打赏
  • 举报
回复
学习过程中
fengzhishang55 2009-05-29
  • 打赏
  • 举报
回复
xue xi
Cusyer 2009-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
因为你有些case里根本没有加break,比如case 5那个
[/Quote]
正解。
shj15953198019 2009-05-29
  • 打赏
  • 举报
回复
学习
xiaoyinsheng 2009-05-29
  • 打赏
  • 举报
回复
XJKSH
wajinying 2009-05-29
  • 打赏
  • 举报
回复
学习学习
无语到了 2009-05-29
  • 打赏
  • 举报
回复
恩 代码有错也可以参考
加载更多回复(38)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧