如何修复C2109:下标需要数组或指针类型

如何修复C2109:下标需要数组或指针类型,c,C,我这里有些作业有问题。我对编程完全是新手,所以任何东西都应该是有帮助的。我不知道如何修复C中的C2109错误。 如您所见,我有一个float数组,我必须对其进行排序,并查找编号55.5 #include <stdio.h> #include <conio.h> #include <math.h> main() { float mr1[30], pom = 0; int i, indeks = -1, j, n, start, end, mid

我这里有些作业有问题。我对编程完全是新手,所以任何东西都应该是有帮助的。我不知道如何修复C中的C2109错误。 如您所见,我有一个
float
数组,我必须对其进行排序,并查找编号
55.5

#include <stdio.h>
#include <conio.h>
#include <math.h>

main() {
    float mr1[30], pom = 0;
    int i, indeks = -1, j, n, start, end, mid;
    printf("Enter length of array n<=30:\n");
    scanf("%d", &n);
    printf("Enter numbers of array mr1:\n");
    for (i = 0; i < n; i++) {
        scanf("%f", &mr1[i]);
    }
    for (i = 0; i <n - 1; i++) {
        for (j = i + 1; j < n; j++)
            if (mr1[i] > mr1[j]) {
                mr1[i] = pom;
                mr1[i] = mr1[j];
                mr1[j] = mr1[i];
            }
    }

    start = 0;
    end = n - 1;
    do {
        mid = (start + end) / 2
        if (mr1[mid] == 55.5) {
            indeks = mid;
        } else {
            if (mr1[mid] < 55.5) {
                start = mid + 1;
            } else {
                kraj = mid - 1;
            }
        }
    } while (poc <= kraj && indeks < 0);
    printf("Number 55.5 is on indeks:\n");
    printf("%d", indeks);
}
#包括
#包括
#包括
main(){
浮动mr1[30],pom=0;
int i,indeks=-1,j,n,开始,结束,中间;

printf(“输入数组长度n代码中存在多个问题:

  • 交换代码不正确。应为:

            pom = mr1[i];
            mr1[i] = mr1[j];
            mr1[j] = pom;
    
  • 您没有将所有
    poc
    翻译为
    start
    kraj
    翻译为
    end

  • mid=(开始+结束)/2之后缺少

  • main()
    main
    函数的过时原型,您应该指定返回类型
    int

  • do
    /
    while
    循环无法正确处理空数组。您应该改用
    while
    循环。根据经验,
    do
    /
    while
    循环通常是不正确的,有时是以细微的方式

以下是更正的版本:

#include <stdio.h>

int main() {
    float mr1[30];
    int n, i, j, index, start, end, mid;

    printf("Enter length of array n<=30:\n");
    if (scanf("%d", &n) != 1 || n < 0 || n > 30) {
        printf("invalid length\n");
        return 1;
    }
    printf("Enter numbers of array mr1:\n");
    for (i = 0; i < n; i++) {
        if (scanf("%f", &mr1[i]) != 1) {
            printf("invalid input\n");
            return 1;
        }
    }
    /* sort the array with simplistic swap sort */
    for (i = 0; i < n - 1; i++) {
        for (j = i + 1; j < n; j++) {
            if (mr1[i] > mr1[j]) {
                /* swap entries */
                float pom = mr1[i];
                mr1[i] = mr1[j];
                mr1[j] = pom;
            }
        }
    }

    /* try and locate 55.5 with binary search */
    index = -1;
    start = 0;
    end = n - 1;
    while (start <= end) {
        mid = (start + end) / 2;
        if (mr1[mid] == 55.5) {
            index = mid;
            break;
        } else {
            if (mr1[mid] < 55.5) {
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
    }
    if (index >= 0) {
        printf("Number 55.5 is at index %d\n", index);
    } else {
        printf("Number 55.5 is not present\n");
    }
    return 0;
}
#包括
int main(){
浮动mr1[30];
int n,i,j,索引,开始,结束,中间;

printf(“输入数组的长度n(1)您在
mid=(start+end)/2
行中遗漏了分号。(2)您没有在任何地方声明变量
poc
kraj
55.5
有点“不错”浮点数。将普通浮点数与
=
进行比较很可能会失败。您应该避免这种情况。请检查
scanf
中的返回值-它返回值是有原因的