鱼C论坛

 找回密码
 立即注册
查看: 2783|回复: 15

为何死循环,调试不出来,挠头吖

[复制链接]
发表于 2014-3-4 22:41:55 | 显示全部楼层 |阅读模式
10鱼币
#define M 10
#include"stdio.h"
void main()
{
        static int a[M]={-12,0,6,23,56,80,100,110,115};
        int n,low,mid,high,found;
        low=0;
        high=M-1;
        found=0;
        printf("input a num to be searched: \n");
        do
        {
                scanf("%d",&n);                  //*1*
                getchar();
        }while(n < a[0] || n > a[M-1]);     //运行到这里就会跳回*1*处f,老是在这三句转攸,出不来,咋办吖??
       
        while(low <= high)
        {
                mid=(low + high)/2;
                if(n == a[mid])
                {
                        found = 1;
                        break;
                }
                else if(n > a[mid])
                { low = mid + 1; }
                else
                { high = mid - 1; }
        }
        if(1 == found)
        {
                printf("the index of %d is %d\n",n,mid);
        }
        else
        { printf("there is not %d\n",n); }
}

有劳各位万能的鱼油指点迷津,感谢万分{:7_154:}

最佳答案

查看完整内容

你数组是开辟10个单元的空间,但初始化里边只有9个数字,所以最后一个a[M-1]自动填充为0,所以不输入的数字总是会满足n > a[M-1],所以总是在循环里出不来。望楼主采纳小弟的答案,以资鼓励,嘿嘿。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-4 22:41:56 | 显示全部楼层
你数组是开辟10个单元的空间,但初始化里边只有9个数字,所以最后一个a[M-1]自动填充为0,所以不输入的数字总是会满足n > a[M-1],所以总是在循环里出不来。望楼主采纳小弟的答案,以资鼓励,嘿嘿。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-4 23:10:30 | 显示全部楼层
scanf("%d",&n) 之后 为什么还要 getchar()  死循环跟你的输入肯定有关系啊。

getchar()是输入一个字符,且只能输入单个字符,是字符输入函数。
而scanf()是输入函数,可以输入字符、字符串、整形数、浮点数等等。

希望你能解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-4 23:11:23 | 显示全部楼层
你输入-10,然后回车,不就跳出来了!跳出来了记得给分:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-4 23:23:05 | 显示全部楼层
a[9]自动填充为0,所以你只能输入-12到0之间的数,也就是3楼那么建议的原因。----个人愚见,请多指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-5 18:45:19 | 显示全部楼层

非常感谢,原来又是偶太粗心,少打了两个数,难怪跟鱼视频的一样的代码,他老人家的可以执行,这边却挂了,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-5 18:47:48 | 显示全部楼层
笑鬼xxoo 发表于 2014-3-4 23:10
scanf("%d",&n) 之后 为什么还要 getchar()  死循环跟你的输入肯定有关系啊。

getchar()是输入一个字符, ...

事关,不加getchar这句,只我输入范围以外的数/字符,就会死循环{:7_183:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-5 18:52:06 | 显示全部楼层
超级忍者龟 发表于 2014-3-4 23:11
你输入-10,然后回车,不就跳出来了!跳出来了记得给分

兄弟,不好意,偶还很菜,虽然龟兄的建议是对的,但最想知的其实是问题背后的为什么...{:7_163:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-5 18:55:16 | 显示全部楼层
zhongguoren 发表于 2014-3-4 23:23
a[9]自动填充为0,所以你只能输入-12到0之间的数,也就是3楼那么建议的原因。----个人愚见,请多指教。

感谢给予说明,开窍了{:7_183:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-5 22:01:27 | 显示全部楼层
欣欣celin 发表于 2014-3-5 18:45
非常感谢,原来又是偶太粗心,少打了两个数,难怪跟鱼视频的一样的代码,他老人家的可以执行,这边却挂了 ...

粗心大意害死人呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-5 22:27:56 | 显示全部楼层
zhaopengfei 发表于 2014-3-5 22:01
粗心大意害死人呀

哈哈,幸好不是造飞机的{:7_183:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-5 22:55:45 | 显示全部楼层
欣欣celin 发表于 2014-3-5 18:52
兄弟,不好意,偶还很菜,虽然龟兄的建议是对的,但最想知的其实是问题背后的为什么...

不好意思,我没权限加好友,新鱼油:) ,可以QQ:28513349
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-5 23:05:58 | 显示全部楼层
超级忍者龟 发表于 2014-3-5 22:55
不好意思,我没权限加好友,新鱼油:) ,可以QQ:28513349

http://fishc.com/dvd/vip.html
看这个,最快有权限的方法{:7_182:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-5 23:10:15 | 显示全部楼层
欣欣celin 发表于 2014-3-5 23:05
http://fishc.com/dvd/vip.html
看这个,最快有权限的方法

呵呵,我比较喜欢开源的free!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-6 01:10:34 From FishC Mobile | 显示全部楼层
呵呵,一样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-6 19:01:12 | 显示全部楼层
超级忍者龟 发表于 2014-3-5 23:10
呵呵,我比较喜欢开源的free!

好吧,等神龟有权限再加吧,嘻{:7_181:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 11:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表