在固定阈值上提取较低的数字?

时间:2016-12-14 20:07:25

标签: c arrays function

我请求你的帮助因为我疯了。

我有这个过程,从我的main获取一个名为lista(类型定义的TipoL)的结构,它由一个int(N,插入的字符数)和一个小写字符数组(seqchar)组成。我需要在用户插入的阈值上打印最小数字的过程。 我想知道为什么这不起作用而不是另一种方法来做到这一点,因为现在我觉得我做错了,因为最后一个printf给出了这个输出,假设d是一个例子:d是最小的字符超过阈值('d')(ASCII'100')'这里没什么'(ASCII'0'),我不知道为什么。

非常感谢您的帮助!

void Minimum(TipoL lista)
{
int i,j;
char k,s,THRESHOLD,ArrTHRESHOLD[lista.N];


    scanf("%c", &THRESHOLD);

    for(i=0; i<lista.N; i++)
    {
        if(lista.seqchar[i]>THRESHOLD)
        {
        ArrTHRESHOLD[i]=lista.seqchar[i];
        }
    }

    s=ArrTHRESHOLD[0];
    for(j=1; j<lista.N; j++)
    {
        if(ArrTHRESHOLD[j]<s)
        {
        s=ArrTHRESHOLD[j];
        }
    }
printf("\nThe smallest character over the threshold '%c' (ASCII '%d') is: '%c'\n(ASCII '%d')\n", THRESHOLD, THRESHOLD, s, s);
}

}

2 个答案:

答案 0 :(得分:1)

问题在于,当您执行以下操作时:

if(lista.seqchar[i]>THRESHOLD)
{
    ArrTHRESHOLD[i]=lista.seqchar[i];
}

您错过了else案例,因此您将ArrTHRESHOLD[i]取消初始化。您应该将其设置为某个maximum value,以避免在下一阶段选择它:

else
{
    ArrTHRESHOLD[i]= 127; // or MAX_CHAR;
}

当然,有比这种方法更好的方法但是由于你请求帮助使你的方法有效,我希望这会有所帮助。

答案 1 :(得分:0)

  

我想知道为什么这不起作用而不是另一种方法来做到这一点

ArrTHRESHOLD具有自动持续时间且没有初始化程序,因此其所有元素最初都是不确定的。您扫描输入数组,并将超过阈值的元素复制到 ArrTHRESHOLD的相应元素,使其他元素不确定。
然后扫描ArrTHRESHOLD,包括不确定元素,以尝试确定最小值 使用不确定的值会产生未定义的行为。

您可以考虑保留迄今为止复制到ArrTHRESHOLD的元素数量的单独计数,并使用它来填充元素的初始子集,没有间隙。之后,您可以像现在一样扫描这些元素。

但是,更好的是完全没有ArrTHRESHOLD:你不需要它,因为你可以在通过lista.seqchar时完成所有必要的工作。