首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个小程序 但是很恼人

2012-08-30 
一个小程序 但是很烦人#include stdio.hvoid text(size_t index) //这个地方不知道是什么意思{int i 0

一个小程序 但是很烦人
#include <stdio.h>

void text(size_t index) //这个地方不知道是什么意思
{
int i = 0;

while(index > 0) //为什么这个循环老不退出呢?
{
i++;
printf("i = %d\n", i);
printf("index = %d\n", index); //打印的时候index居然是负数,但是在调试的时候它的值是很大的
index--; //不懂这是为什么?????
}

return ;
}

int main()
{
int i = -1;

text(i);

return 0;
}

大师们麻烦您们为我解答了,小弟拜谢!!!


[解决办法]
size_t是无符号的,即总是>=0
-1是0xffffffff,循环还是会退出了,但循环次数很多
[解决办法]
1. szie_t 是标准C库中定义的,在32为系统中表示unsigned int。
2. 在将i=-1传入text()的时候,-1转换成unsigned int后的值是4294967295。
所以index = 4294967295。故会循环很多次。
3. 输出负号,是因为你的输出格式是%d,要求带符号。

[解决办法]

探讨

size_t是无符号的,即总是>=0
-1是0xffffffff,循环还是会退出了,但循环次数很多

[解决办法]
探讨

但是那个index不是一直大于0的吧???那不是死循环??

[解决办法]
负数在内存中是以补码的形式存储的-1的补码为0xFFFFFFFF,szie_t 是标准C库中定义的,在32为系统中表示unsigned int。在将i=-1传入text()的时候,-1转换成unsigned int后的值是4294967295,所以循环多次,但总会退出循环。
输出格式是%d,要求为有符号数据所以每次输出的index总是负数
[解决办法]
探讨

size_t是无符号的,即总是>=0
-1是0xffffffff,循环还是会退出了,但循环次数很多

[解决办法]
size_t 无符号 
在内存中是以补码形式
会是一个很大的数
[解决办法]
两个printf涵数影响了运行速度,如果把两个printf涵数放到循环体外,相信很快会退出循环。
[解决办法]
探讨
两个printf涵数影响了运行速度,如果把两个printf涵数放到循环体外,相信很快会退出循环。

[解决办法]
while(index > 0)
这样写,就是想一直循环下去的吖~~
[解决办法]
可能是数比较大,程序就崩了。。。不是死循环,有限的东西无论多大都不会是无限的,但会给人无限的感觉
[解决办法]
执行了两分钟了还没结束!死循环???

热点排行