首页 > 解决方案 > ***检测到堆栈粉碎***:终止中止(核心转储)

问题描述

我正在尝试编写一个程序来读取一个包含 15 个元素的数组,并为每种数字仅输出一次该数组中的数字(不会输出重复)。我在标题中收到错误,我不知道为什么。这是我的代码:

#include <stdio.h>

void main () {

    int initial[15], final[15], nf=1, aux;

    printf("Insert the 15 elements:\n");

    for (int i = 0; i < 15; ++i)
    {
        printf("Insert the %dº element:\n",i+1);
        scanf("%d", &initial[i]);
    }

    final[0]=initial[0];

    for (int i = 1; i < 15; ++i)
    {

        for (int k = 0; k < nf ; ++k)
        {   
            if (initial[i]!=final[k]) {

                final[nf]=initial[i];
                nf++;
            }
        }
    }

    for (int c = 0; c < nf ; ++c)
    {
        printf("%d, ",final[c]);
    }

}

标签: c

解决方案


您对内部循环的逻辑是有缺陷的。当元素不同时,条件initial[i]!=final[k]会得到满足,这不是您想要的。您想检查数组initial[i]中是否存在。final

for (int i = 1; i < 15; ++i)
{
    bool found = false;
    for (int k = 0; k < nf ; ++k)
    {
        if (initial[i]==final[k]) {
            found = true;
            break; // Found a dup, no need to continue further.
        }
    }

    // Not present in final array, so include it.
    if (!found) final[nf++] = initial[i];
}

推荐阅读