用while加scanf循环赋值问题

clleady 2011-10-28 08:01:15
static int CreatList(Linklist *L,int n)


{

int a[]={0};

Linklist *s,*r;

int i=0;

int j=0;

r=L;

do
{

scanf("%d",&a[i]);
j=i++;

}

while(a[j]!=-1);

...
}

ubuntu下gdb调试
Breakpoint 1, main () at blinklist.c:197
197 CreatList(L,i);
(gdb) s
CreatList (L=0x804867b, n=0) at blinklist.c:54
54 int a[]={0};
(gdb) s
60 int i=0;
(gdb) x/x &a
0xbffff65c: 0x00000000
(gdb) x/8x &a
0xbffff65c: 0x00000000 0x0000003b 0xb7fee8d0 0x0000003b
0xbffff66c: 0x0028bff4 0x00000000 0x00000000 0xbffff6a8
(gdb) s
62 int j=0;
(gdb) s
65 r=L;
(gdb) s
74 scanf("%d",&a[i]);
(gdb) s
1 2 3 -1
77 j=i++;
(gdb) s
82 while(a[j]!=-1);
(gdb) print j
$1 = 0
(gdb) print i
$2 = 1
(gdb) s
74 scanf("%d",&a[i]);
(gdb) s
77 j=i++;
(gdb) x/8x &a
0xbffff65c: 0x00000001 0x00000002 0x00000000 0x00000001
0xbffff66c: 0x0804867b 0x00000000 0x00000000 0xbffff6a8
(gdb) s
82 while(a[j]!=-1);
(gdb) print j
$3 = 1
(gdb) pint i
Undefined command: "pint". Try "help".
(gdb) print i
$4 = 2
(gdb) s
74 scanf("%d",&a[i]);
(gdb) s
77 j=i++;
(gdb) x/8x &a
0xbffff65c: 0x00000001 0x00000002 0x00000003 0x00000002
0xbffff66c: 0x0804867b 0x00000000 0x00000000 0xbffff6a8
(gdb) s
82 while(a[j]!=-1);
(gdb) s
74 scanf("%d",&a[i]);
(gdb) print j
$5 = 2
(gdb) print i
$6 = 3
(gdb) s
77 j=i++;
(gdb) x/8x &a
0xbffff65c: 0x00000001 0x00000002 0x00000002 0xffffffff
0xbffff66c: 0x0804867b 0x00000000 0x00000000 0xbffff6a8
(gdb) s
82 while(a[j]!=-1);
(gdb) s
74 scanf("%d",&a[i]);
(gdb) print j
$7 = -1

(gdb) x/8x &a
0xbffff65c: 0x00000001 0x00000002 0xffffffff 0x00000000
0xbffff66c: 0x0804867b 0x00000000 0x00000000 0xbffff6a8
(gdb)

为什么j会等于-1呢?谢谢高手指点。

...全文
181 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
clleady 2011-10-28
  • 打赏
  • 举报
回复
那么我不知道我会scanf多少数量的int数据, 那么数组a应该如何声明呢?
难道用malloc申请。这样它的长度就是动态的了。我这样改对吗?谢谢高手指点!
编程点滴 2011-10-28
  • 打赏
  • 举报
回复
int a[]={0};这里错了,干脆这样吧,int a[100000]={0};这样就可以随便输入了。。。。。。。

xq7997879 2011-10-28
  • 打赏
  • 举报
回复
好问题,过来学习啦
hulongchuan 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dmcxnoface 的回复:]
int a[]={0};//这句相当于int a[1]={0};
估计问题出在这里。数组越界。
[/Quote]
这就是问题所在!
AnYidan 2011-10-28
  • 打赏
  • 举报
回复
google EOF
小笨同学 2011-10-28
  • 打赏
  • 举报
回复
lz 是先学了PHP,再转C的吧。int a[0]={0};定义了只有一个元素的数组。
西方惨败 2011-10-28
  • 打赏
  • 举报
回复
int a[]={0};//这句相当于int a[1]={0};
估计问题出在这里。数组越界。

69,369

社区成员

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

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