Dr丶温 发表于 2018-3-12 08:17:45

为啥最后一个sacnf()函数一开始不执行呢,路过的大神进来帮忙调教下呗

一开始没执行到最后一个scanf()函数,直到输入n或是N才直接退出
因为系统问题装的编译器都调试不了,所以来不耻下问了{:10_266:} {:10_266:}
#include <stdio.h>

//在一个从大到小排序的15个数中找打输入的数
//使用折半查找法

#define MAX 15

int main(void)
{
        int array;
        int i, j, temp, flag;        //临时变量
        int up, low, shuru;        //上限变量 下限变量 查找数
        char ch;
       
       
        printf("请输入数字:\n");
        scanf("%d", &array);
        i = 1;
        while(i < MAX)
        {
                scanf("%d", &array);
                if(array >= array)
                {
                        i++;
                }
                else
                {
                        printf("输入的数不比前一个数小,请重新输入:");
                }
        }
       
        printf("\n");
        for(i = 0; i < MAX; i++)
        {
                printf("%5d", array);
        }
       
        flag = 1;       
       
        while(flag)
        {
                printf("\n请输入一个该数组中数字:");
                scanf("%d", &shuru);       
                temp = 0;                //开关变量
                low = 0;
                up = MAX-1;        
                if((shuru < array) || (shuru > array))
                {
                        j = -1;
                }
                while((!temp) && (low <= up))
                {
                        i = (up+low)/2;
                        if(shuru == array)
                        {
                                j = i;
                                printf("数字 %d 在数组元素中的第%d位!\n", shuru, j+1);
                                temp = 1;       
                        }
                        else if(shuru < array)
                        {
                                up = i - 1;
                        }
                        else
                        {
                                low = i + 1;
                        }
                }
               
                if(!temp || j == -1)
                {
                        printf("数字%d在数组中找不到!\n", shuru);
                }
               
                printf("\n是否继续查找:(Y/N)");
                scanf("%c", &ch);
               
                if(ch == 'N' || ch == 'n')
                {
                        flag = 0;
                }
        }
       
        getch();
        return 0;
}

BngThea 发表于 2018-3-12 08:17:46

本帖最后由 BngThea 于 2018-3-12 08:56 编辑

每一个scanf后面加一句
getchar();
清理一下输入流中的回车符

夜猫子侠客 发表于 2018-3-12 10:41:46

后一个scanf因为是接收一个char字符,把回车吃了,没吃到Y或者是N,,在后一个scanf加一个getchar或加个头文件stdlib.h,并在后一个scanf前加一个fflush(stdin);

Zmynx_2017 发表于 2018-3-12 11:00:58

#include <stdio.h>
#define MAX 15
int main(void)
{
      int array;
      int i, j, temp, flag;      
      int up, low, shuru;      
      char ch;
      
      
      printf("请输入数字:");
      scanf("%d", &array);
      i = 1;
      while(i < MAX)
      {
                scanf("%d", &array);
                if(array >= array)
                {
                        i++;
                }
                else
                {
                        printf("输入的数不比前一个小,请重新输入:");
                }
      }
      
      printf("\n");
      for(i = 0; i < MAX; i++)
      {
                printf("%5d", array);
      }
      
      flag = 1;      
      
      while(flag)
      {
                printf("\n请输入一个该数组中的数字:");
                scanf("%d", &shuru);      
                                getchar();
                temp = 0;               
                low = 0;
                up = MAX-1;         
                if((shuru < array) || (shuru > array))
                {
                        j = -1;
                }
                while((!temp) && (low <= up)&&j != -1)
                {
                        i = (up+low)/2;
                        if(shuru == array)
                        {
                              j = i;
                              printf("数字 %d 在数组元素中的第 %d 位!\n", shuru, j+1);
                              temp = 1;      
                        }
                        else if(shuru < array)
                        {
                              up = i - 1;
                        }
                        else
                        {
                              low = i + 1;
                        }
                }
               
                if(!temp || j == -1)
                {
                        printf("数字%d在数组中找不到!\n", shuru);
                }
                printf("\n是否继续查找(Y/N):");   //我觉得你的代码应该改成输入n退出,任意键继续。
                scanf("%c", &ch);
               
                if(ch == 'N' || ch == 'n')
                {
                        flag = 0;
                }
      }
      return 0;
}这个是可以运行的,感觉还有其他问题,你可以再修改一下,更美观舒适。

Zmynx_2017 发表于 2018-3-12 11:04:20

代码问题就是那个scanf函数相当于接受了一个 回车键 所以,不需要你输入了

产生这个问题的原因,还是因为我给你注释部分,你只是检测了输入是不是n但是并没有检查是不是其他字符,

所以,输入任意其他字符都会继续,此时,输入的相当于回车所以,他就自动继续了。

Dr丶温 发表于 2018-3-12 19:12:39

BngThea 发表于 2018-3-12 08:32
每一个scanf后面加一句
getchar();
清理一下输入流中的回车符

一语惊醒梦中人,了解了,多谢大神调教

Dr丶温 发表于 2018-3-12 19:13:21

夜猫子侠客 发表于 2018-3-12 10:41
后一个scanf因为是接收一个char字符,把回车吃了,没吃到Y或者是N,,在后一个scanf加一个getchar或加个头 ...

说的通俗易懂,那么会教人,是不是老湿~{:10_297:}

Dr丶温 发表于 2018-3-12 19:15:29

Zmynx_2017 发表于 2018-3-12 11:04
代码问题就是那个scanf函数相当于接受了一个 回车键 所以,不需要你输入了

产生这个问题的原因,还是因 ...

真是太感谢了,还劳烦修改代码{:10_301:}

Dr丶温 发表于 2018-3-12 19:16:55

关键是都对,俺就按回复时间设置为最佳哈,三楼四楼有心了{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 为啥最后一个sacnf()函数一开始不执行呢,路过的大神进来帮忙调教下呗