鱼C论坛

 找回密码
 立即注册
查看: 4273|回复: 13

不会调试的一个条件

[复制链接]
发表于 2011-9-15 12:37:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void main()
{
int b[100]={1,1},a[100]={1,1};
long M;
printf("请输入M的值");
scanf("%ld",&M);
int i;
long sum=2;
for(i=2;;i++)
{  

   a[i]=a[i-2]+2*a[i-1];
  sum+=a[i];
  b[i]=a[i];   
  if(a[i]>M)break;
     
}
printf("%ld\n",sum);
for(i--;i>=0;i--)
{
  printf("%ld ",b[i]);
}

}
前者没问题后者有问题

#include<stdio.h>
void main()
{
int b[100]={1,1},a[100]={1,1};
long M;
printf("请输入M的值");
scanf("%ld",&M);
int i;
long sum=2;
for(i=2;;i++)
{  
   if(a[i]>M)break;

   a[i]=a[i-2]+2*a[i-1];
  sum+=a[i];
  b[i]=a[i];   
     
}
printf("%ld\n",sum);
for(i--;i>=0;i--)
{
  printf("%ld ",b[i]);
}

}

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-15 12:38:50 | 显示全部楼层
后面的哪里动了常量区?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-15 12:47:53 | 显示全部楼层
是不是b[100]={1,1},a[100]={1,1};这样定义后面那些0都不可以这样引用?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-15 14:06:50 | 显示全部楼层
:@  出了什么问题都没说,把代码往这里一帖什么意思
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-15 14:19:33 | 显示全部楼层
做一下注释不行么,不然看的烦呀!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-15 19:54:42 | 显示全部楼层
for(i=2;;i++)
{  
   if(a[i]>M)
     break;
  
   a[i]=a[i-2]+2*a[i-1];
   sum+=a[i];
   b[i]=a[i];      
}

前后差异主要是这个for循环体,这么看来应该是a[i]初始值的问题,a数组在初始化的过程中只给a[0],a[1]赋了值,a[2]是什么值不明,建议你单步调试看看a[2]的值,有的编译器初始化数组默认取0,有的则是随机数。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-16 12:03:47 | 显示全部楼层
报错,内存访问不能为读!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-16 14:02:26 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-16 22:09:37 | 显示全部楼层
循环中a[i]的值未知,如果编译系统默认初始化为0的话,循环将不会停止直到数组越界,内存不能访问而崩溃
而第一个程序在判断语句if(a[i]>M)break;之前a[i]已经有值,所以程序正常运行。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-17 10:53:09 | 显示全部楼层
哟。。看不透
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-17 21:00:53 | 显示全部楼层
9楼正解啊,  a[2]没有赋值就先使用了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-17 21:02:40 | 显示全部楼层
哟。。看不透
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-19 20:39:44 | 显示全部楼层
好像是很深奥的问题i
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-26 13:06:41 | 显示全部楼层
你程序声明部分混乱,就有了语法错误了。
int b[100]={1,1},a[100]={1,1};
long M;
printf("请输入M的值");
scanf("%ld",&M);
int i;
long sum=2;
你把int i;
long sum=2;
放输出函数printf之间就不会有语法错误了。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-8 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表