大家都说要写博客,其实也不知道改写什么。召哥说,在学某部分的知识时候记下一些程序,可以在以后遇到问题是回来找哪里出错。想想召哥所言很有道理!
而拥小抱思来想去,回忆起了如下程序:
#include<stdio.h>
#include<stdlib.h>
void main()
{
int n1,n2;
int **a,i,j,k,l,flag=0;
puts("please input length:");
scanf("%d",&n2);
puts("please input height:");
scanf("%d",&n1);
a=(int**)malloc(n1*sizeof(int*));
for(i=0;i<n1;i++)
{
a[i]=(int*)malloc(n2*sizeof(int));
}
puts("please input numbers:");
for(j=0;j<n1;j++)
{
printf("please input %d numbers of the %d line:",n2,j+1);
for(i=0;i<n2;i++)
{
scanf("%d",&a[j][i]);
}
}
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
for(i=0;i<n1;i++)
{
for(j = 0;j<n2;j++);
{
flag=0;
for(k=0;k<n2;k++)
if(a[i][j]<a[i][k])
flag++;
for(k=0;k<n1;k++)
if(a[i][j]>a[k][j])
flag++;
if(flag==0)
printf("that is %d\n",a[i][j]);
}
}
}
这个程序求的是二维数组的“鞍点”(该数为本行最大,本列最小)。其实重点不在于动态数组的建立,循环的套用。之所以记下来这个程序是因为:
{{{那是一个美好的清晨,拥小抱提着电脑包,迈着轻快的步伐,走在去往实验室的路上(好吧,扯远了)。总之就是,我用了1个多小时的时间去查程序的问题在哪,后来失败了;又请教召哥,召哥花了半个多小时的时间,在VC上进行了各种试验,最后发现,在最终的多重循环的第二重, for(j = 0;j<n2;j++) ,这个语句之后 j 的值直接变成2,这令我们很费解,不,是百思不得其解。明明赋给 j=0,为啥你不执行???到后来,终于发现,原来只是在这 for(j = 0;j<n2;j++) 后面多了一个 “;”}}}
“差之毫厘谬以千里”越是小错误越致命。谨以此篇,提醒自己要在敲代码时万分细心,小心小心再小心,不能再在这种地方犯错。