- 主题:已经解决 while循环哪里错了啊
dwFileSize初值是418997932,
PartSize的值是104857600
while(1)
{
if ( dwFileSize < 0 )
break;
else
{
i++;
dwFileSize -= PartSize;
printf("%d\n",dwFileSize);
}
}
我希望的结果是运行4次退出循环。printf的得到的数据,并不是我预期的结果。
418997932
314140332
209282732
104425132
-432468
-105290068
-210147668
-315005268
-419862868
-524720468
-629578068
-734435668
-839293268
-944150868
-1049008468
-1153866068
-1258723668
-1363581268
100MB = 104857600
--
修改:javame FROM 101.88.252.*
FROM 101.88.252.*
你的dwFileSize的类型是unsigned吧,"%d"是按signed输出的。
循环为啥不用 while((int)dwFileSize>=0){} ?
【 在 javame (javame) 的大作中提到: 】
: dwFileSize初值是418997932,
: PartSize的值是104857600
: while(1)
: ...................
--
FROM 183.220.26.*
这个代码是先测试的,没通过。所以想换个笨办法,还是过不去。
#include <stdio.h>
#define PartSize 100*1024*1024 // 分块的大小100MB
int main()
{
unsigned int dwFileSize = 418997932;
int i = 0;
while(1)
{
if ( dwFileSize < 0 )
goto line1;
else
{
i++;
dwFileSize -= PartSize;
printf("%d\n",dwFileSize);
}
line1:
break;
}
printf("%d\n",i);
printf("while test.\n");
}
改成这样,可以退出来,但是得到分块的数字不对。
break的时候,中间不能有别的语义,不然永远退不出来的。
gcc和vc都试过了。
【 在 wushunchao (fixer) 的大作中提到: 】
: 你的dwFileSize的类型是unsigned吧,"%d"是按signed输出的。
: 循环为啥不用 while((int)dwFileSize>=0){} ?
--
FROM 101.88.252.*
解决了,谢谢。
#include <stdio.h>
#define PartSize 100*1024*1024 // 分块的大小100MB
int main()
{
unsigned int dwFileSize = 418997932;
int i = 0;
while((int)dwFileSize>=0)
{
i++;
dwFileSize -= PartSize;
}
printf("%d\n",i);
}
【 在 wushunchao (fixer) 的大作中提到: 】
: 你的dwFileSize的类型是unsigned吧,"%d"是按signed输出的。
: 循环为啥不用 while((int)dwFileSize>=0){} ?
--
FROM 101.88.252.*
得。
如果你只是想算出块数的话,岂不是用 i =
dwFileSize/PartSize + (dwFileSize%PartSize?
0:1) 来得简单。
如果你非要用while和unsinged,那while改成
while(dwFileSize>PartSize)吧,
楼上的">=0"其实有bug, 比如dwFileSize=1
PartSize=1时。应该是">"。
【 在 javame (javame) 的大作中提到: 】
: 解决了,谢谢。
: #include <stdio.h>
: #define PartSize 100*1024*1024 // 分块
的大小100MB
: ...................
--
修改:wushunchao FROM 183.220.26.*
FROM 183.220.26.*
等完整做出来,再来请教吧。
谢谢你。
【 在 wushunchao (fixer) 的大作中提到: 】
: 得。
: 如果你只是想算出块数的话,岂不是用 i = (dwFileSize+1)/PartSize 来得简单,
: bug只在 dwFileSize == UINT_MAX啥的 时出现,修正一下就是。
: ...................
--
FROM 101.88.252.*