for循环为什么没有执行

corey613 2016-03-10 12:32:38
一个卷积程序,cov函数里的for循环为什么没有运行呢?

#include<stdio.h>
#include<stdlib.h>
const int height1 = 125;
const int width1 = 80;
const int height2 = 100;
const int width2 = 100;
// 根据题目要求,设定数据的行数和列数
/*
resource 读入数据指针
result 结果数据指针
rh 读入数据的行数
rw 读入数据的列数
temp 模版数据指针
temph 模版数据的行数
tempw 模版数据的列数

void cov(int *resource,int *result,int rh,int rw,int *temp,int temph,int tempw)函数计算卷积结果,无返回值。

*/

void cov(int *resource,int *result,int rh,int rw,int *temp,int temph,int tempw)
{

int i,j,k,l;
printf("The function has done\n");//test
//计算数据过程中中,当所剩下的行数和列数小于模版窗口的行数和列数时就停止计算。
for(i=0; (rh-i) < temph; i++)
{printf("The function1 has done\n");//test
for(j=0;(rw-j)<tempw;j++)
{printf("The function2 has done\n");
int res=0;

//进行一次卷积计算所得到的的结果,初始值记为零。

for(k=0;k<temph;k++)
{printf("The function3 has done\n");
for(l=0;l<tempw;l++)
{printf("The function4 has done\n");
res+=resource[(i+k)*rw+j+l]*temp[l*tempw+k];
//计算卷积结果
printf("%d",res);
}
}
result[(i+1)*rw+j+1]=res;
//将计算结果赋给结果数组
}
}
}

//main 函数
int main(void)
{
FILE *data,*result1,*result2;

//data 原始数据文件指针
//result1 第一次计算结果保存的数据文件指针
//result2 第二次计算结果保存的数据文件指针

int resource[10000],result[10000];
// 读入数据存放在resource所指的数组中
// 计算结果存放在result所指的数组中


int temp1[9]={0,-1,0,-1,5,-1,0,-1,0};
int temp2[25]={0,0,-1,0,0,0,-1,-2,-1,0,-1,-2,16,-2,-1,0,-1,-2,-1,0,0,0,-1,0,0};
// 根据题目要求,设定模版

int box;
// 每读进一个数,暂时存于box中

data=fopen("SourceData.txt","r");
if(data==NULL)
{
printf("can not open this file!\n");
exit(0);
}
//检验数据文件是否成功打开

result1=fopen("result1.txt","w");
result2=fopen("result2.txt","w");
//建立两个结果文件

//将数据读入resource中,并且将result初始化。
int i;
for(i=0;i<10000;i++)
{
fscanf(data,"%d",&box);
resource[i]=box;

}


//先将数据理解为125*80,模版1(temp1)进行卷积运算。
cov(resource,result,height1,width1,temp1,3,3);


//将卷积运算的结果存入result1文件中,并关闭result1指针。

for(i=0;i<10000;i++)
{
fprintf(result1,"%6d",result[i]);

}
if(fclose(result1))
printf("Can't close this file.\n");

//将数据理解为100*100,用模版2(temp2)进行卷积运算。
cov(resource,result,height2,width2,temp2,5,5);

//将运算结果存入result2文件中,并关闭result2指针。
for(i=0;i<10000;i++)
{
fprintf(result2,"%6d",result[i]);
}
if(fclose(result2) || fclose(data))
printf("Dont't close this file.\n");
//关闭data文件指针
printf("work done!");
return 0;
}

运行结果如下,只有第一个printf执行了,for循环里的printf都没有执行
The function has done
work done!
Process returned 0 (0x0) execution time : 0.053 s
Press any key to continue.
The function has done
...全文
1846 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-03-10
  • 打赏
  • 举报
回复
哈哈,LZ大于小于搞混了么
lm_whales 2016-03-10
  • 打赏
  • 举报
回复
哦,楼主自己找到原因了,直接结贴吧,不然回答越来越多,都是无用的
lm_whales 2016-03-10
  • 打赏
  • 举报
回复
循环条件设置错误 应该是对 for 循环的条件,理解有误,或者对要做的事情理解有误。 其实 C,C++ 循环 ,都是当型循环。 条件合适(非0)才执行,到不合适终止循环执行, 如果一开始就不合适 for,while 一次循环也不执行 其中for(e1;e2;e3){s;} 如果条件不合适, 仅仅执行 初始化表达式 e1一次, 执行条件表达式e2一次, 并作出判断是否执行循环体的判断一次。 while(e)s; 仅仅执行一次 e; 并作出判断是否执行循环体的判断一次。 do{s;}while(e); 仅仅执行循环体s一次,e 一次,并作出是否继续循环的判断一次。 C,C++ 没有直到型循环, 如果需要,可以自行把当型,转换成直到型(循环条件取非即可实现) 直到型循环,对于C,C++是一种语法冗余,所以C,C++没有实现直到型循环。
muzi_li90 2016-03-10
  • 打赏
  • 举报
回复
我来看看。。。。
粗心的郑先生 2016-03-10
  • 打赏
  • 举报
回复
打断点进行调试吧。
赵4老师 2016-03-10
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 2016-03-10
  • 打赏
  • 举报
回复
遇到这种问题学会利用单步调试,一步步看程序怎么执行,看哪一步和你预期的不一致
cocoabird 2016-03-10
  • 打赏
  • 举报
回复
断点调试就能找到原因了

69,373

社区成员

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

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