【问题标题】:1 and 0 are present in an empty int array1 和 0 存在于一个空的 int 数组中
【发布时间】:2018-02-25 22:18:22
【问题描述】:

有人可以指出哪里出了问题,值 0 和 1 总是在 if 中并返回 true。 (假设数组为空)。

#include <stdio.h>
#include <stdbool.h>
#define ARRAY_SIZE 5

int getUserInput(int position){
    printf("Please enter an integer for the %d position of the array\n", position);
    int input;
    scanf(" %d", &input);
    return input;
}

bool hasValue(int value, int array[ARRAY_SIZE]){
    int i;
    for(i = 0; i < ARRAY_SIZE; i++){

        if (value == array[i]){
            printf("This value already exists in the array.\n");
            return true;
        }
    }
    return false;
}

main(){
    int array[ARRAY_SIZE];
    int index = 0;

    while (index < ARRAY_SIZE ){
        int input = getUserInput(index);

        if (!hasValue(input, array)){
            array[index] = input;
            index++;
        }
     }
}

【问题讨论】:

  • 没有什么“错误”。发布足够多的内容以显示 array[] 的填充方式并显示 hasValue() 的调用方式:minimal reproducible example
  • “数组为空”是什么意思?你的意思是“未初始化”吗?
  • 您展示的代码没有什么致命的错误,但该函数仅适用于大小正好为 ARRAY_SIZE 的数组。
  • 没有“空”数组这样的东西。您还没有向我们展示如何定义 ARRAY_SIZEgetUserInput。如果您检查尚未初始化的值,则行为未定义,您很可能会得到垃圾值。 01 和其他任何值一样都是垃圾。
  • hasValue 中,您应该使用i &lt; index 而不是i &lt; ARRAY_SIZE,因为这就是您拥有的值的数量。

标签: c arrays initialization undefined


【解决方案1】:

最好将数组size 作为参数传递给函数而不是修复它。喜欢

bool hasValue(int value, int array[], unsigned int size)

由于您的 ARRAY_SIZE 是一个常量,因此函数内的 for 循环始终执行 ARRAY_SIZE 次。

编辑 如果您仍然没有解决代码问题。把相关代码换成这个试试

bool hasValue(int value, int array[], int size) {
    int i;
    for(i = 0; i < size; i++) {
        if (value == array[i]) {
            printf("This value already exists in the array.\n");
            return true;
        }
    }
    return false;
}

int main() {
    int array[ARRAY_SIZE];
    int index = 0;

    while (index < ARRAY_SIZE ) {
        int input = getUserInput(index);

        if (!hasValue(input, array, index)) {
            array[index] = input;
            index++;
        }

     }

     return 0;
}

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多