[问题] do while循环无法跳出

楼主: nobodyuse (祝天下有情人终成眷属)   2015-05-10 18:19:09
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
while内条件式无法成立
喂入的资料(Input):
while(sort_list->data)
预期的正确结果(Expected Output):
当不输入资料,直接按下ENTER键时应该跳出do while循环
错误结果(Wrong Output):
do while行程无线循环
程式码(Code):(请善用置底文网页, 记得排版)
小弟欲输入各个数字,并按下ENTER键后,离开程
typedef struct _list{
int data;
struct _list *next;
}list;
int main(int argc,char *argv[])
{
int input=0;
char *buffer=(char *)malloc(5);
list *sort_list;
do{
list *sort_list=(list *)malloc(sizeof(list));
sort_list->next=NULL;
printf("Please input your member to sort: ");
fgets(buffer,5,stdin);
sort_list->data=(atoi)(buffer);
printf("%d\n",sort_list->data);
} while (sort_list->data);
free(buffer);
free(sort_list);
}
补充说明(Supplement):
作者: vvrr (vvrr)   2015-05-10 18:44:00
用gcc 4.8.2在Ubuntu下执行是正常的@@顺带一提,这样子如果输入“0”的话也会跳出循环哦..
作者: longlongint (华哥尔)   2015-05-11 04:32:00
对不起 我看不懂原po的程式
作者: scwg ( )   2015-05-11 05:04:00
在 do{ 里面宣告的 list *sort_list 遮住了外面的定义, 选个不同的名字, 然后读书看 linked list 怎么插入元素
楼主: nobodyuse (祝天下有情人终成眷属)   2015-05-11 08:27:00
这是一个未完成的程式,主要是要以指标方式储存资料do while 循环会多增加一个list *sort_list是因为gcc编译时会出现sort_list undeclared (first use in thisfunction)的错误讯息,这是让小弟感到奇怪的地方。但是打印sort_list->data,不论是按下ENTER与0其显示值都是0,只是纳闷为何跳不出循环?另外,若不以指标方式而修改宣告为list sort_list,并将所有的sort_list->data改为sort_list.data则可正常执行,可以跳脱do while循环,小弟也曾怀疑是否以指标方在循环中print出sort_list->data值确定为0,因此不知跳不出循环,不知小弟的观念上哪里出了问题?感谢各位
作者: qsort (Cos)   2015-05-11 09:56:00
你的compile是哪一个?do while的sort_list scope,只限在do while内而while (sort_list->data) 的sort_list, 其实是用buffer下面的那一个,也就是一个uninitialized sort_listhttp://ideone.com/hYmzpU 请看内存,不是同一块
作者: vvrr (vvrr)   2015-05-11 11:05:00
0rz我第一次compile的时候也有出现那个错误 修掉后忘记了..没注意到就推文说没有问题@@...抱歉
楼主: nobodyuse (祝天下有情人终成眷属)   2015-05-11 11:50:00
感谢vvrr协助解决...将do while内部list *sort_list=(list *)malloc(xxxx)拿掉list *即可正常work...感谢各位!!

Links booklink

Contact Us: admin [ a t ] ucptt.com