c语言问题

xuruideyonghu 2014-03-20 03:42:46
#include <stdio.h>
typedef struct
{int x;
int y;
}ST;
main()
{
ST a[10],d[5],s[20],b[20],c[20];
a[1].x=0;a[1].y=0;a[2].x=0;a[2].y=1;a[3].x=0;a[3].y=2;a[4].x=0;a[4].y=3;a[5].x=3;a[5].y=0;
a[6].x=3;a[6].y=1;a[7].x=3;a[7].y=2;a[8].x=3;a[8].y=3;a[9].x=1;a[9].y=1;a[10].x=2;a[10].y=2;
d[1].x=0;d[1].y=2;d[2].x=2;d[2].y=0;d[3].x=1;d[3].y=1;d[4].x=0;d[4].y=1;d[5].x=1;d[5].y=0;
int i=1,j=1,k=1,m,u,z,l,t;
s[0].x=s[1].x=3;s[0].y=s[1].y=3;
printf("cian--chuanshang--duian");
while(i,i<12,i++){
while(j,j<=5,j++){
if(i%2==0)z=1;if(i%2==1)z=-1;
d[j].x*=z;d[j].y*=z;
s[i+1].x=s[i].x+d[j].x;s[i+1].y=s[i].y+d[j].y;
t=0;
while(k,k<=10,k++){

if((s[i+1].x==a[k].x)&&(s[i+1].y==a[k].y))t=1;
}
if(t==0)continue;
l=(i+1)%2;m=l;u=0;
if(i+1>=3){while(m==0||m==1){if(s[i+1].x==s[m].x&&s[i+1].y==s[m].y)u=1;break;}
}
}
if(t==0,printf("No Result"))break;
b[i+1].x=3-s[i+1].x;
b[i+1].y=3-s[i+1].y;
printf("%d,%d--%d,%d--%d,%d",s[i].x,s[i].y,c[i+1].x,c[i+1].y,b[i+1].x,b[i+1].y);
if(s[i+1].x==a[1].x&&s[i+1].y==a[1].y)break;
}
}


这是我编写的一个程序,调试时出现对话框“unhandled exception in duhe.exe:0xC0000005:Access Violation”
下边出现提示“Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\KernelBase.dll', no matching symbolic information found.
First-chance exception in duhe.exe: 0xC0000005: Access Violation.
”问题出现在第23行 “if((s[i+1].x==a[k].x)&&(s[i+1].y==a[k].y))t=1;


谁能告诉我这是为什么,并把正确代码发给我。谢谢!
...全文
183 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuruideyonghu 2014-03-22
  • 打赏
  • 举报
回复
我很久没有写代码了,很多东西都忘了,代码写的确实不对,不过还是谢谢楼上了。分都给你了。
__cc__ 2014-03-21
  • 打赏
  • 举报
回复
引用 6 楼 xuruideyonghu 的回复:
我都给改到a[20]了,还是不对 问题不只是出在这里吧 请再帮我好好看看
你这个代码完全不是按照c语法来写的,不好看的。只有你自己认真修改才能真正领会c语言。 修改要遵循以下几点: 1)索引从0开始,到数组大小-1; 2)循环使用for,不要用条件表达式,循环变量要初始化。 你改好了我再看看,就上面那段代码,表示压力很大!
FancyMouse 2014-03-21
  • 打赏
  • 举报
回复
while(i,i<12,i++) 你写的什么玩意……
xuruideyonghu 2014-03-21
  • 打赏
  • 举报
回复
我都给改到a[20]了,还是不对 问题不只是出在这里吧 请再帮我好好看看
苍蝇①号 2014-03-20
  • 打赏
  • 举报
回复
多写写多练练多踩踩坑就好了,写程序的谁年轻的时候都遇到过这问题
__cc__ 2014-03-20
  • 打赏
  • 举报
回复
引用 3 楼 xuruideyonghu 的回复:
可是我所有的变量都是从1开始取值的。请认真帮我看看 谢谢了!
看来你是不知道c数组索引的细节了,c数组索引都是从0开始,到数组大小-1. 譬如int n[10];那么你只能使用n[0]到n[9],如果你用n[10]就是越界了。 所以: ST a[10],d[5],s[20],b[20],c[20]; a[1].x=0;a[1].y=0;a[2].x=0;a[2].y=1;a[3].x=0;a[3].y=2;a[4].x=0;a[4].y=3;a[5].x=3;a[5].y=0; a[6].x=3;a[6].y=1;a[7].x=3;a[7].y=2;a[8].x=3;a[8].y=3;a[9].x=1;a[9].y=1;a[10].x=2;a[10].y=2; d[1].x=0;d[1].y=2;d[2].x=2;d[2].y=0;d[3].x=1;d[3].y=1;d[4].x=0;d[4].y=1;d[5].x=1;d[5].y=0; 你这些代码都是越界的。 c和更高级的脚本语言在这一点上是不同的、 不知道你明白错在哪里了吗? 如果你刻意要用,那你就把数组大小加1。 譬如定义ST a[11];那就不越界了。希望改好给分啊!
xuruideyonghu 2014-03-20
  • 打赏
  • 举报
回复
可是我所有的变量都是从1开始取值的。请认真帮我看看 谢谢了!
赵4老师 2014-03-20
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
__cc__ 2014-03-20
  • 打赏
  • 举报
回复
引用 楼主 xuruideyonghu 的回复:
”问题出现在第23行 “if((s[i+1].x==a[k].x)&&(s[i+1].y==a[k].y))t=1; ” 谁能告诉我这是为什么,并把正确代码发给我。谢谢!
我没认真看 但是我知道,你这里一定越界了 while(j,j<=5,j++){ if(i%2==0)z=1;if(i%2==1)z=-1; d[j].x*=z;d[j].y*=z; s[i+1].x=s[i].x+d[j].x;s[i+1].y=s[i].y+d[j].y; d只有5个元素,应该是0索引到4,你上面循环的条件是j<=5,肯定访问违例了。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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