c# 有人知道为什么这个“线性搜索”代码不会显示正确的结果吗?

jhdbpxl9  于 2022-11-27  发布在  C#
关注(0)|答案(1)|浏览(146)

这是在10个数组表中进行线性搜索代码,顺便说一句,它必须在do-while或while循环中,而不是for循环中。

#include <stdio.h>
#include <stdlib.h>

int
search(int t[], int x, int n)
{
    int i;

    i == 0;

    do {
        i = i + 1;
    } while ((t[i] != x) || (n > i));

    if (t[i] == x) {
        printf("index=%d", i + 1);
    }
    else {
        printf("element not found");
    }
}

int
main()
{
    int t[10];
    int x, i;

    printf("enter x: ");
    scanf("%d", &x);

    for (i = 0; i < 10; i++) {
        printf("enter table element : ");
        scanf("%d", &t[i]);
    }

    search(t, x, 10);

    return 0;
}

我希望得到表中指定数字(x)的索引,但问题是结果是错误的(它显示3位数字),有时根本不会显示任何内容

fhity93d

fhity93d1#

这行代码没有任何作用。==是比较运算符

i == 0;

相反,您应该使用assignemnt运算符:

i = 0;

我稍微修改了你的代码,使它工作。请注意scanf函数中的格式字符串,这很重要。请阅读文章scanf() leaves the newline character in the buffer

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int
search(int t[], int x, int n)
{
    int i = 0;

    do {
           if( t[i] == x )
           {
              printf("index=%d", i);   
              return 0;
           }  
    } while (i++ < n );

    printf("element not found");
    return 1;
}


int
main()
{
    int t[10];
    int x;

    printf("enter x: ");
    scanf(" %d*c", &x);
    if( errno) perror("scanf x");

    for (int i = 0; i < 10; i++) {
        printf("enter table element : ");
        scanf(" %d*c\n", &t[i]);
    }

    search(t, x, 10);

    return 0;
}

相关问题