我请求你的帮助因为我疯了。
我有这个过程,从我的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);
}
}
答案 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
时完成所有必要的工作。