鱼C论坛

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

为什么不让我输入Y或者N。。

[复制链接]
发表于 2012-4-16 22:24:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#define M 10
int main()
{
        int a[M]={-12,0,6,16,23,56,80,100,110,115};
        int n,low,mid,high,found=0,s=1;
        char c;
        low=0;
        high=M-1;
        while(s)
        {
                printf("请输入要找的数字:");
                scanf("%d",&n);
                if((n<a[0] )|| (n>a[high]))
                        found=0;
                while(low<=high && found!=1)
                {
                        mid=(low+high)/2;
                        if(n==a[mid])
                        {
                                found=1;
                                printf("这个元素是:%d",mid);
                               
                        }
                        else if(n>a[mid])
                                low=mid+1;
                        else
                                high=mid-1;
                }
                if(found!=1)
                        printf("没有这个数字\n");
                printf("还要再找吗(Y/N)?");
                scanf("%c",&c);
                if(c=='N' || c=='n')
                s=0;
               
        }
        return 0;
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-16 22:25:06 | 显示全部楼层
编译后 没提示让我输入N或者Y 直接跳到上面 说清再输入数字。。然后 编译后 结果 也不对 但是 你要是 第一次 就输入一个 你要找的  就对了。。。求助
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 13:07:13 | 显示全部楼层
#include<stdio.h>
#define M 10
int main()
{
        int a[M]={-12,0,6,16,23,56,80,100,110,115};
        int n,low,mid,high,found=0,s=1;
        char c;
        
        while(s)
        {
                                low=0;
                                high=M-1;
                printf("请输入要找的数字:");
                scanf("%d",&n);
                if((n<a[0] )|| (n>a[high]))
                        found=0;
                while(low<=high && found!=1)
                {
                        mid=(low+high)/2;
                        if(n==a[mid])
                        {
                                found=1;
                                printf("这个元素是:%d",mid);
                                
                        }
                        else if(n>a[mid])
                                low=mid+1;
                        else
                                high=mid-1;
                }
                if(found!=1)
                        printf("没有这个数字\n");
                printf("还要再找吗(Y/N)?\n");
                                getchar();
                scanf("%c",&c);
                if(c=='N' || c=='n')
                                        s=0;
               
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 13:15:27 | 显示全部楼层
上面有点问题,这个对。
#include<stdio.h>
#define M 10
int main()
{
        int a[M]={-12,0,6,16,23,56,80,100,110,115};
        int n,low,mid,high,found=0,s=1;
        char c;
        
        while(s)
        {
                                low=0;
                                high=M-1;
                                found=0;
                printf("请输入要找的数字:");
                scanf("%d",&n);
                if((n<a[0] )|| (n>a[high]))
                        found=0;
                while(low<=high && found!=1)
                {
                        mid=(low+high)/2;
                        if(n==a[mid])
                        {
                                found=1;
                                printf("这个元素是:%d",mid);
                                
                        }
                        else if(n>a[mid])
                                low=mid+1;
                        else
                                high=mid-1;
                }
                if(found!=1)
                        printf("没有这个数字\n");
                printf("还要再找吗(Y/N)?\n");
                                getchar();
                scanf("%c",&c);
                if(c=='N' || c=='n')
                                        s=0;
               
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 17:48:12 | 显示全部楼层
为什么要在printf("还要再找吗(Y/N)?\n");
                                getchar();
                scanf("%c",&c);
                if(c=='N' || c=='n')
                                        s=0;
这里加个getchar()呢???
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 18:00:29 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 20:13:03 | 显示全部楼层
朗朗 发表于 2012-4-17 13:15
上面有点问题,这个对。
#include
#define M 10

经过改写后 编译成功。想再问个问题 为什么 要加个getchar() 我的scanf("%c,c)为什么不行
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 20:49:25 | 显示全部楼层
因为前一个scanf已输入字符和回车,回车在缓冲区,如果没有getchar,系统就将回车自动付给scanf。你还可以flushall(),清空缓冲区,都对。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 20:57:22 | 显示全部楼层
getch()是字符输入函数!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 21:34:45 | 显示全部楼层
朗朗 发表于 2012-4-17 20:49
因为前一个scanf已输入字符和回车,回车在缓冲区,如果没有getchar,系统就将回车自动付给scanf。你还可以f ...

那意思 是没getchar   我的 scanf  等于是白搭。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 21:37:28 | 显示全部楼层
好好学习了 发表于 2012-4-17 20:57
getch()是字符输入函数!

非常感谢,你说的 我稍微明白了  郁闷了 不过 又引出好多问题了,,。 上一个回车 在缓冲区。。竟然能自动 赋值给C  迷糊啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 21:49:37 | 显示全部楼层
在第二次引用scanf时,记得要清空缓冲区。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 23:16:27 | 显示全部楼层
猪八哥 发表于 2012-4-17 21:34
那意思 是没getchar   我的 scanf  等于是白搭。。。

其实可以不用加的。。
在%c前面加个空格也可以的。嘻嘻、、  
scanf(" %c",&c);

改好的代码如下:
  1. #include<stdio.h>
  2. #define M 10
  3. int main()
  4. {
  5.          int a[M]={-12,0,6,16,23,56,80,100,110,115};
  6.          int n,low,mid,high,found=0,s=1;
  7.          char c;
  8.          
  9.          while(s)
  10.          {
  11.                                  low=0;
  12.                                  high=M-1;
  13.                                  found=0;
  14.                  printf("请输入要找的数字:");
  15.                  scanf("%d",&n);
  16.                  if((n<a[0] )|| (n>a[high]))
  17.                          found=0;
  18.                  while(low<=high && found!=1)
  19.                  {
  20.                          mid=(low+high)/2;
  21.                          if(n==a[mid])
  22.                          {
  23.                                  found=1;
  24.                                  printf("这个元素是:%d\n",mid);
  25.                                  
  26.                          }
  27.                          else if(n>a[mid])
  28.                                                          low=mid+1;
  29.                          else
  30.                                                          high=mid-1;
  31.                  }
  32.                  if(found!=1)
  33.                                          printf("没有这个数字\n");
  34.                  printf("还要再找吗(Y/N)?\n");
  35.                                  scanf(" %c",&c);
  36.                  if(c=='N' || c=='n')
  37.                                          s=0;
  38.                  
  39.          }
  40.          return 0;
  41. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 23:26:54 | 显示全部楼层
问一下    getchar在这儿的作用就是清除回车的么?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-18 22:18:54 | 显示全部楼层
飒琅氦囿 发表于 2012-4-17 23:26
问一下    getchar在这儿的作用就是清除回车的么?

不是的,getchar()是从键盘接收一个字符。。。看好了哦 是从键盘接收  不是从缓冲区哦。。你比我还新手啊。这楼问题 可以多看书 就知道了。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-18 22:20:07 | 显示全部楼层
cathe 发表于 2012-4-17 23:16
其实可以不用加的。。
在%c前面加个空格也可以的。嘻嘻、、  
scanf(" %c",&c);

靠  谢谢啊。 第一次 见一版主 给我回复。。。朗朗 也很猛  说的我很明白。。。郁闷 前面的 空格 就是吧 上一次 缓冲区的  回车 给用上是吧?
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-12 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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