用折半查找法查找数组中元素


#include<stdio.h>
#define N 15
int main()
{
    int i, number, top, bott, mid, a[N], flag = 1, sign, loca;
    char c;
    printf("enter data:\n");
    scanf_s("%d", &a[0]);
    i = 1;
    while (i < N)
    {
        scanf_s("%d", &a[i]);
        if (a[i] >= a[i - 1])
            i++;
        else
            printf("enter this data again:\n");
    }
    printf("\n");
    for (i = 0; i < N; i++)
        printf("%5d", a[i]);
    printf("\n");
    while (flag)
    {
        top = 0;
        bott = N - 1;
        sign = 0;
        printf("input number to look for:");
        scanf_s("%d", &number);
        if (number<a[0] || number>a[N - 1])
            loca = -1;
        while ((!sign) && (top <= bott))
        {
            mid = (top + bott) / 2;
            if (number == a[mid])
            {
                loca = mid;
                printf("Has found %d,its position is %d\n", number, loca + 1);
                sign = 1;
            }
            else if (a[mid] < number)
                top = mid+1;
            else
                bott = mid-1;
        }
        if (!sign || loca == -1)
            printf("cannot find %d.\n", number);
        printf("continue or not(Y/N)?");
        scanf_s("%c", &c, 1);
        if (c == 'n' || c == 'N')
            flag = 0;
    }
    return 0;
}

img


这个是有什么问题呢,是scanf_s函数输入字符的锅吗

截图要截图全,输入法挡住错误信息了🧐

这个语句貌似并没有执行,我测试的时候没有输入YN就直接执行下一个语句了

 printf("continue or not(Y/N)?");
        scanf_s("%c", &c, 1);

你的报错信息说的就是这个问题,因为你输入了y,并不是一个int类型,但是被下一句的scanf吃掉了

printf("input number to look for:");
        scanf_s("%d", &number);//这个吃掉了你输入的y和n

img


调试发现是吞了上一次输入的回车

img


在前面加一个getchar就ok了

img


修改后源码

//NO14 scanf输入报错
#include<stdio.h>
#define N 15
int main()
{
    int i, number, top, bott, mid, a[N], flag = 1, sign, loca;
    char c;
    printf("enter data:\n");
    scanf_s("%d", &a[0]);
    i = 1;
    while (i < N)
    {
        scanf_s("%d", &a[i]);
        if (a[i] >= a[i - 1])
            i++;
        else
            printf("enter this data again:\n");
    }
    printf("\n");
    for (i = 0; i < N; i++)
        printf("%5d", a[i]);
    printf("\n");
    while (flag)
    {
        top = 0;
        bott = N - 1;
        sign = 0;
        printf("input number to look for:");
        scanf_s("%d", &number);
        if (number<a[0] || number>a[N - 1])
            loca = -1;
        while ((!sign) && (top <= bott))
        {
            mid = (top + bott) / 2;
            if (number == a[mid])
            {
                loca = mid;
                printf("Has found %d,its position is %d\n", number, loca + 1);
                sign = 1;
            }
            else if (a[mid] < number)
                top = mid + 1;
            else
                bott = mid - 1;
        }
        if (!sign || loca == -1)
            printf("cannot find %d.\n", number);
        getchar();
        printf("continue or not(Y/N)?");
        scanf_s("%c", &c, 1);
        if (c == 'n' || c == 'N')
            flag = 0;
    }
    return 0;
}

如果对你有帮助,还请点个采纳吧!