- 主题:已经解决 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.*
这个代码是先测试的,没通过。所以想换个笨办法,还是过不去。
#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.*
等完整做出来,再来请教吧。
谢谢你。
【 在 wushunchao (fixer) 的大作中提到: 】
: 得。
: 如果你只是想算出块数的话,岂不是用 i = (dwFileSize+1)/PartSize 来得简单,
: bug只在 dwFileSize == UINT_MAX啥的 时出现,修正一下就是。
: ...................
--
FROM 101.88.252.*