【问题标题】:Program not proceeding after taking array input in C在 C 中获取数组输入后程序不继续
【发布时间】:2021-06-08 08:42:46
【问题描述】:
#include<stdio.h>
int main(){
    printf("Enter the size of array: ");
    int n,a[n],element;
    scanf("%d", &n);
    printf("Enter the elements of array in ascending order\n");
    for(int i=0; i<n; i++){
        scanf("%d ", &a[i]);
    }
    printf("Enter the element to be searched: ");
    scanf("%d", &element);
    int low = 0;
    int high = n-1;
    int mid = (low+high)/2;
    int flag = 0;
    while(low<=high){
        if(a[mid]==element){
            flag =1;
            break;
        }
        if(a[mid]<element){
            low = mid + 1;
        }
        else{
            high = mid -1;
        }
    }
    if(flag){
        printf("%d found", element);
    }
    else{
        printf("Not found");
    }
    return 0;
}

当我运行代码时,我只能输入数组的元素,因此程序不会继续进行。 代码有什么问题?

【问题讨论】:

  • 这里a[n]n的值是多少int n,a[n],element;??
  • 全部取自用户
  • 你不明白。 int n; 创建 n 但它的值是不确定的。在为它分配值之前,您不能使用它。但是您确实在声明之后立即在 int n,a[n],element; 中使用它,并且在声明 a[n] 之前给它分配了一个值...在您阅读 之后之前不要使用 int a[n];(并验证nscanf() 的转换)。也就是说,必须先设置n的值才能做int a[n];
  • 您还需要在每次迭代结束时更新mid = (low+high)/2;...因为mid 将在每次迭代后更改,直到找到结果。

标签: arrays c input


【解决方案1】:
int n,a[n],element;

相当于说

int n;
int a[n];
int element;

注意到什么了吗?您正在声明一个具有未初始化变量n 的可变大小数组。这会导致意外行为。 设置 n 的值之后声明您的数组!


int n,element;
scanf("%d", &n);
int a[n];

【讨论】:

  • 我会继续称之为未定义的行为。访问n(具有自动存储持续时间的变量)的值,而它的值是不确定的——好旧的UB。 (是的,结果可能出乎意料:)
  • 从用户那里取出n后声明数组还是一样的问题
【解决方案2】:

观察你的代码,

#include<stdio.h>
int main(){
    printf("Enter the size of array: ");
    int n,a[n],element;
    scanf("%d", &n);
    printf("Enter the elements of array in ascending order\n");
    for(int i=0; i<n; i++){
        scanf("%d", &a[i]); // correction: here you had given space after %d...
    }
    printf("Enter the element to be searched: ");
    scanf("%d", &element);
    int low = 0;
    int high = n-1;
    int mid = (low+high)/2;
    int flag = 0;
    while(low<=high){
        if(a[mid]==element){
            flag =1;
            break;
        }
        if(a[mid]<element){
            low = mid + 1;
        }
        else{
            high = mid -1;
        }
    }
    if(flag){
        printf("%d found", element);
    }
    else{
        printf("Not found");
    }
    return 0;
}

你在%d之后给了空间scanf("%d ", &amp;a[i]);,这不应该被使用,这就是为什么你的程序在接受数组输入后没有继续......我假设你的二进制搜索操作是正确的并且工作正常......

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多