求高手帮我看看哪有错
我这个程序有一个测试用例说是无效内存引用,可我不知道哪里越界了。。。
题目
53 猜数字看人品
成绩: 10 / 折扣: 0.8
描述
Tom 和 Jerry 做猜数字的游戏,Tom 想一个数字然后让 Jerry 去猜,数字的范围在 1 到 10 之间。对于 Jerry 每讲的一个数,Tom 都要讲这个数是 too high 或者 too low 或者 right on,直到 right on 结束。为了防止 Tom 作弊,Jerry 把每一次的对话记录下来,现在让你去判断 Tom 有没有作弊。
输入
游戏可能做很多次,直到 Jerry 猜 0 的时候游戏结束,每一次猜测由一个正整数和一行回答组成。
输出
对每一次游戏如果 Tom 的回答有自相矛盾的地方,就输出 Tom is dishonest,否则输出 Tom may be honest。
程序:
#include<stdio.h>
#define N 10
void main()
{ int i,j,n,k,flag=1;
char a[N][N];
for(j=0;;j++)
{
for(i=0;;i++)
{
gets(a[i]);
if(a[i][0]=='0')
goto end;
if(a[i][0]=='r')
break;
}
if(a[i-1][1]>='0'&&a[i-1][1]<='9')
n=(a[i-1][0]-'0')*10+a[i-1][1]-'0';
else
n=a[i-1][0]-'0';
for(j=0;j<=i-3;)
{
if(a[j][1]>='0'&&a[j][1]<='9')
k=(a[j][0]-'0')*10+a[j][1]-'0';
else
k=a[j][0]-'0';
if(k>=n&&a[j+1][4]=='l')
{
flag=0;
break;
}
if(k<=n&&a[j+1][4]=='h')
{
flag=0;
break;
}
j=j+2;
}
if(flag==1)
printf("Tom may be honest\n");
else
printf("Tom is dishonest\n");
}
end:;
}
[解决办法]
不能单步调试吗?
或崩溃后,查看调用堆栈?
[解决办法]
单步调试吧,遇到错误提示的时候点击重试按钮,就可以看到错误的地方了。我觉得是你输入的数据超出了内存
[解决办法]
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main()
{
srand(time(NULL));
int a=rand()%10+1;
printf("Tom想到了一个数\n");
printf("请Jerry猜一个数\n");
int b;
do
{
scanf("%d",&b);
if(a==b)
{
printf("Right on\n");
exit(0);
}
if(a<b)
{
printf("Too hight\n");
}
if(a>b)
{
printf("Too low\n");
}
}while(b!=0);
}
代码很简洁,可供楼主参考