是否有任何原因为什么打印简单数组会产生奇怪的值

时间:2019-05-03 18:00:50

标签: c arrays mergesort

我正在使用数组做一个简单的合并排序问题。因此,我首先扫描一个数组,然后对其进行合并排序。但是当我打印数组时,它给出了最奇怪的值。我不明白为什么。

如果我尝试使用简单的迭代器i扫描并打印另一个文件中的数组,那么就可以了。

    int n, arrayIndex;
    printf("Enter the number of elements in array between 1 to 100");
    scanf("%d", &n);
    printf("%d \n", n);
    int a[n];
    printf("Enter the elements of array \n");
    for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
    {
        scanf("%d ",&a[arrayIndex]);
    }

    for (arrayIndex = 0; arrayIndex <n; arrayIndex++)
    {
        printf("%d ", a[arrayIndex]);
    }   

我得到的结果是:

Enter the number of elements in array between 1 to 100 2
2
Enter the elements of array
1 3
-1709286559 32766

3 个答案:

答案 0 :(得分:1)

您的问题是一个典型的错误

    for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
    {
        scanf("%d ",&a[arrayIndex]);
    }

;行末尾的for是一个空语句。接下来的代码块仅执行一次。

为避免此类愚蠢的错误,可以使用Kernighan和Richie样式,其中在for行的末尾插入开括号,而不是在它们自己的行上插入:

    for (arrayIndex = 0; arrayIndex < n; arrayIndex++) {
        scanf("%d ", &a[arrayIndex]);
    }

还请注意,您不应在scanf()转换规范中添加尾随空格,否则将导致scanf()提示输入更多数据,直到文件结尾或输入的字符不匹配为止isspace()。还测试scanf()的返回值以检测无效输入并避免随后的未定义行为:

    for (arrayIndex = 0; arrayIndex < n; arrayIndex++) {
        if (scanf("%d", &a[arrayIndex]) != 1) {
            printf("invalid input\n");
            return 1;
        }
    }

答案 1 :(得分:0)

在此为您加上分号

for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
{
    scanf("%d ",&a[arrayIndex]);
}

当你不应该 如果您删除了此代码,则您的代码应该像这样,它将可以正常工作 另外,删除“%d”,“ scanf("%d ",&a[arrayIndex]);”内的空格,应该像这样scanf("%d",&a[arrayIndex]);

int n, arrayIndex;
printf("Enter the number of elements in array between 1 to 100");
scanf("%d",&n);
printf("%d \n", n);
int a[n];
printf("Enter the elements of array \n");
for (arrayIndex = 0; arrayIndex < n; arrayIndex++)
{
    scanf("%d",&a[arrayIndex]);
}

for (arrayIndex = 0; arrayIndex <n; arrayIndex++)
{
    printf("%d ", a[arrayIndex]);
}   

答案 2 :(得分:0)

如果由于下面的代码部分而发生这种情况:

for (arrayIndex = 0; arrayIndex < n; arrayIndex++);
{
    scanf("%d ",&a[arrayIndex]);
}

for-loop语句后写分号(;)时,循环正在循环,而无需进行

{
    scanf("%d ",&a[arrayIndex]);
}

这部分代码。 for-loop的循环结束后,该部分仅执行一次。在完成循环后,整数arrayIndex的值将变为n。因此输入值将存储在a[n]中。

在将索引<0> a 从索引0打印到n-1时,输入仅存储在a[n]中,因此所有输出都显示垃圾值。

因此,在for循环后删除分号即可,一切正常。您的代码必须如下所示:

int n, arrayIndex;
printf("Enter the number of elements in array between 1 to 100");
scanf("%d",&n);
printf("%d \n", n);
int a[n];
printf("Enter the elements of array \n");
for (arrayIndex = 0; arrayIndex < n; arrayIndex++)
{
    scanf("%d ",&a[arrayIndex]);
}

for (arrayIndex = 0; arrayIndex <n; arrayIndex++)
{
    printf("%d ", a[arrayIndex]);
}