***检测到堆栈粉碎***:<未知>终止中止(核心已转储)

时间:2018-11-18 17:22:15

标签: c

我正在尝试编写一个程序,该程序读取具有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]);
    }

}

3 个答案:

答案 0 :(得分:2)

您的内循环逻辑有缺陷。当元素不同(这不是您想要的)时,将满足条件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];
}

答案 1 :(得分:0)

在不考虑要真正对阵列做些什么的情况下,下面将解释一些潜在的缺陷。 您会看到在调试模式下清除了晶体,监视着library(tidyverse) df %>% mutate(status = ifelse(Result == Team1 | Result == Team2, 'winning', 'loosing')) ,并且k的值发生了变化。或使用控制台打印。

nf

答案 2 :(得分:0)

尝试此算法。希望它可以工作:

def firstNonRepeating(arr, n): 

for i in range(n): 
    j = 0
    while(j < n): 
        if (i != j and arr[i] == arr[j]): 
            break
        j += 1
    if (j == n): 
        return arr[i] 

return -1