赤裸裸的一个语句为什么不执行呢

milkcu 2013-05-01 04:39:22
看代码,那个for循环为何不执行呢,Hello都没打印出来,真心求教,也许是很简单的失误。
# include <stdio.h>
int main(void)
{
int fib[3];
int i;
long long int sum;

fib[0] = 1;
fib[1] = 2;
sum = 0;
for(i = 2; fib[i % 3] < 4000000; i++) {
printf("Hello\n"); //为什么这个语句都没有执行???
fib[i % 3] = fib[(i - 1) % 3] + fib[(i - 2) % 3]; //队列的思想
if(fib[i % 3] % 2 == 0) {
sum += fib[i % 3];
}
printf("%d\n", i);
}
printf("%d\n", fib[i - 1]);
printf("%d", sum);
}
...全文
671 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
大浩船长 2013-05-03
  • 打赏
  • 举报
回复
数组没有初始化,fib[2]的值未知
milkcu 2013-05-03
  • 打赏
  • 举报
回复
引用 20 楼 wanyangnumberone 的回复:
http://projecteuler.net/problem=2
就是在做这个题的时候遇到的小问题,现在已经解决啦
missheaven2011 2013-05-03
  • 打赏
  • 举报
回复
f[2]未初始化,数据未知
neutral creature 2013-05-03
  • 打赏
  • 举报
回复
fib[2]未知,结果不缺定
prohibit 2013-05-02
  • 打赏
  • 举报
回复
引用 7 楼 hugett 的回复:

# include <stdio.h>
int main(void)
{
	int fib[3];
	int i;
	long long int sum;
	
	fib[0] = 1;
	fib[1] = 2;
	fib[2] = fib[0] + fib[1];//fib[2]要初始化。。
	sum = 0;
	for(i = 2; fib[i % 3] < 4000000; i++) {
		printf("Hello\n");    //为什么这个语句都没有执行???
		fib[i % 3] = fib[(i - 1) % 3] + fib[(i - 2) % 3];  //队列的思想 
		if(fib[i % 3] % 2 == 0) {
			sum += fib[i % 3];
		}
		printf("%d\n", i);
	}
	printf("%d\n", fib[(i - 1) % 3]);//这里应该要%吧。。否则数组会越界。。
	printf("%d", sum);
}
++,fib[2]没有初始化,值是随机的; printf("%d\n", fib[i - 1]);//会有越界的情况
zaixiankaifa 2013-05-02
  • 打赏
  • 举报
回复
f[3]没有赋值,所以没有执行下面循环中的语句咯。。。。。。
常如意 2013-05-02
  • 打赏
  • 举报
回复
fib[2]未初始化,使用的是不可预知的值
lin5161678 2013-05-02
  • 打赏
  • 举报
回复
fib[2]垃圾值 但是没有越界的情况
绯红女王 2013-05-02
  • 打赏
  • 举报
回复
楼上都说了,过来支持下!
wanyangnumberone 2013-05-02
  • 打赏
  • 举报
回复
http://projecteuler.net/problem=2
失散糖 2013-05-02
  • 打赏
  • 举报
回复
其实自己调试一下就知道了,懒
你好不开心 2013-05-02
  • 打赏
  • 举报
回复
其实自己调试一下就知道了,懒
Amos_Hong-yang 2013-05-02
  • 打赏
  • 举报
回复
引用 14 楼 prohibit 的回复:
[quote=引用 7 楼 hugett 的回复:]

# include <stdio.h>
int main(void)
{
	int fib[3];
	int i;
	long long int sum;
	
	fib[0] = 1;
	fib[1] = 2;
	fib[2] = fib[0] + fib[1];//fib[2]要初始化。。
	sum = 0;
	for(i = 2; fib[i % 3] < 4000000; i++) {
		printf("Hello\n");    //为什么这个语句都没有执行???
		fib[i % 3] = fib[(i - 1) % 3] + fib[(i - 2) % 3];  //队列的思想 
		if(fib[i % 3] % 2 == 0) {
			sum += fib[i % 3];
		}
		printf("%d\n", i);
	}
	printf("%d\n", fib[(i - 1) % 3]);//这里应该要%吧。。否则数组会越界。。
	printf("%d", sum);
}
++,fib[2]没有初始化,值是随机的; printf("%d\n", fib[i - 1]);//会有越界的情况[/quote]顶一个楼主初始化一下fib[2],让fib[2]=0,都是可以的,后面会改fib[2]的值,不然for循环第一次执行的时候fib[2]是垃圾值,很有可能进不去for循环,第二个错误之前都没注意到……囧,14楼大神啊
line_us 2013-05-02
  • 打赏
  • 举报
回复
观摩问题讨论意见。
lm_whales 2013-05-02
  • 打赏
  • 举报
回复
各位的说法应该都对。 fib[i % 3] < 4000000 由于i=2时 i % 3=2,fib 是初始化残余 如果fib[2]=4000001 或者其他比4000000大的数据,循环一次也不执行。
china_jeffery 2013-05-01
  • 打赏
  • 举报
回复
fib[2]是未知的
芥末的无奈 2013-05-01
  • 打赏
  • 举报
回复
越界咯越界咯
hugett 2013-05-01
  • 打赏
  • 举报
回复

# include <stdio.h>
int main(void)
{
	int fib[3];
	int i;
	long long int sum;
	
	fib[0] = 1;
	fib[1] = 2;
	fib[2] = fib[0] + fib[1];//fib[2]要初始化。。
	sum = 0;
	for(i = 2; fib[i % 3] < 4000000; i++) {
		printf("Hello\n");    //为什么这个语句都没有执行???
		fib[i % 3] = fib[(i - 1) % 3] + fib[(i - 2) % 3];  //队列的思想 
		if(fib[i % 3] % 2 == 0) {
			sum += fib[i % 3];
		}
		printf("%d\n", i);
	}
	printf("%d\n", fib[(i - 1) % 3]);//这里应该要%吧。。否则数组会越界。。
	printf("%d", sum);
}
langzi_1949 2013-05-01
  • 打赏
  • 举报
回复
for(i = 2; fib[i % 3] < 4000000; i++) 这句话有问题,i%3==2;然而fib[2]这个数组的 值是系统给的垃圾值
wizard_tiger 2013-05-01
  • 打赏
  • 举报
回复
LS都说了,路过学习一下。
加载更多回复(4)

70,013

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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