当前位置: 代码迷 >> C语言 >> 好急好急呀 又是null pointer assignment 的问题
  详细解决方案

好急好急呀 又是null pointer assignment 的问题

热度:737   发布时间:2007-04-25 12:43:19.0

简单整理一下你的程序
你的程序写的太乱了
看了有点晕

#include "stdio.h"
#include "string.h"
main()
{
int n,m,i,j,k,p,q,s,k1,l,sig,num,r;
char a[200][200],b[200][200],ch;

scanf("%d",&num);//输入几组单词表/
ch=getchar();
ch=getchar();
s=0;

do
{
scanf("%d %d",&m,&n);//单词表的行数列数/
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(" %c",&a[i][j]);//输入单词表中字母/

scanf("%d",&k);//被寻找单词的个数/
k1=0;
do
{
scanf("%s",b[k1]);//输入被寻找的单词/
l=strlen(b[k1]);
for(i=0;i<m;i++)//一个个从首字母进行寻找判断/
for(j=0;j<n;j++)
{
if(a[i][j]==b[0][0])
{
sig=1;//标志变量/
{
if(l<=n-j) //当首字母相同的时候从八个方向进行寻找/
{
for(p=0,q=j;p<l;p++,q++)
if(a[i][q]!=b[k1][p]) //比较每个方向上的各个字符是否与单词相同,不同时跳出循环/
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1) //包含单词时时输出字母表中的对应的与被找单词相同的第一个字母的位置/
{
printf("%d %d\n",i+1,j+1);
goto t; //想跳出循环但是用break跳不出整个,就用了goto/
}
}
{
if(l<=j+1)
{
for(p=0,q=j;p<l;p++,q--)
if(a[i][q]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
{
if(l<=i+1)
{
for(p=0,q=i;p<l;p++,q--)
if(a[q][j]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
{
if(l<=m-i)
{
for(p=0,q=i;p<l;p++,q++)
if(a[q][j]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
{
if(l<=n-j&&l<=m-i)
for(p=0,q=i,r=j;p<l;p++,q++,r++)
{
if(a[q][r]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
{
if(l<=i+1&&l<=j+1)
{
for(p=0,r=j,q=i;p<l;p++,r--,q--)
if(a[q][r]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
{
if(l<=m-i&&l<=j+1)
for(p=0,r=j,q=i;p<l;p++,r--,q++)
{
if(a[q][r]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
{
if(l<=i+1&&l<=n-j)
for(p=0,r=j,q=i;p<l;p++,r++,q--)
{
if(a[q][r]!=b[k1][p])
{
sig=0;
break;
}
}
else
sig=0;
if(sig==1)
{
printf("%d %d\n",i+1,j+1);
goto t;
}
}
}
}
t: ;
k1++;
}while(k1<k);
s++;
}while(s<num);
}


----------------解决方案--------------------------------------------------------

你的程序应该是下标越界问题
以前做过一个类似的程序
你参照一下吧:
/* HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"

char word[7][12]={"dogxbxxxnoon",
"bhellotherec",
"akciuqbrownm",
"xxxgexlahjij",
"xbzoxvuxxxox",
"xlxdzxexxxjx",
"xuxxblxnkgod" };

char find[14][18]={ "hello",
"dog",
"brown",
"join",
"row",
"quick",
"averyverylongword",
"noon",
"zo",
"blue",
"blunt",
"help",
"even",
"blink" };

int putf_x[26][30],putf_y[26][30];
int putf_n[26],outnum[14];

void unite();
void findnum();
void outresult();

main()
{
unite();
findnum();

getch();
}

void unite()
{
int i,j;
int wr;


for(i=0;i<26;i++)
putf_n[i]=0;

for(i=0;i<7;i++)
for(j=0;j<12;j++)
{
wr=word[i][j]-97;

putf_x[wr][putf_n[wr]]=j;
putf_y[wr][putf_n[wr]]=i;
putf_n[wr]++;
}

}

void findnum()
{
int i,j=0;
int f_x,f_y,x,y,l,w;
int wr;
char xj;

for(i=0;i<14;i++)
{
j=0;
wr=find[i][j]-97;
for(l=0;l<putf_n[wr];l++)
{
f_x=putf_x[wr][l];
f_y=putf_y[wr][l];
for(w=0;w<8;w++)
{
j=0;
x=f_x;
y=f_y;

while(find[i][j]!='\0'&&x<12)
{
switch(w)
{
case 0:x++; y--;break;
case 1:x--; y++;break;
case 2:x++; y++;break;
case 3:x--; y--;break;
case 4:y--;break;
case 5:y++;break;
case 6:x++;break;
case 7:x--;break;
default:;
}

if(x<12&&y<7&&x>=0&&y>=0)
{
j++;

if(find[i][j]=='\0') outnum[i]++;

if(word[x][y]!=find[i][j])
{
x=90;
}
}
else
{
x=90;
}
}

}
}
}
for(i=0;i<14;i++)
{
printf("%d\n",outnum[i]);
}
}

void outresult()
{
int i;

for(i=0;i<14;i++)
{
printf("the word %s was found %d time in the grid\n",find[i],outnum[i]);
}
}


----------------解决方案--------------------------------------------------------
以下是引用cdmalcl在2007-4-25 12:41:18的发言:

服了老K了
竟然在技术区灌水
而且你对的也太差了

文盲


----------------解决方案--------------------------------------------------------
以下是引用Knocker在2007-4-25 16:50:18的发言:

文盲

缺月挂疏桐,漏断人初静。谁见幽人独往来?飘
缈孤鸿影。 惊起却回头,有恨无人省。拣尽寒
枝不肯栖,寂寞沙洲冷。

放在诗里才有意境


----------------解决方案--------------------------------------------------------
我最喜欢这首词了
苏轼写的真是太好了
意境凄美 让人心灵受到一种孤冷的洗礼........

程序我设了个标记变量跳出了
不过奇怪的是在tc上能够输出结果
不过换到了我们的gcc编译器上居然没有东西输出来
不知道是什么原因....http://bbs.bc-cn.net/Skins/Default/emot/em13.gif

----------------解决方案--------------------------------------------------------
谁知道原因呢 我都被这程序折腾好久好久了
呜呜呜
救救我


----------------解决方案--------------------------------------------------------

哥,忘掉这段程序把,如果重写需要半个小时的话,改正你的程序至少需要1个小时。
这位大哥的问题是如何理清自己的思路,而不是程序。


----------------解决方案--------------------------------------------------------
知道了 你才是大哥呢
程序思路还是很明了的
没什么了
已经出来了


----------------解决方案--------------------------------------------------------
    呵呵!学习学习...
----------------解决方案--------------------------------------------------------
  相关解决方案