C 为什么我会得到某些错误和错误的输出?

C 为什么我会得到某些错误和错误的输出?,c,C,我的任务是获取数组输入之间的常量值。 我该怎么做呢?我使用了选择排序算法并搜索了值,但我知道这是错误的方法。首先,25项。第一条注释是正确的,如果输入最大项数,则不会设置templength。通过一步一步地跟踪代码将显示这一点 关于输出中的bug。我会避免在数组索引中使用过多的偏移量。这使得代码更难理解,当然也更难调试。在这种情况下,偏移量也会导致注释中指出的非常短的数组出现问题。为什么不试试这样的方法呢: int findconstant(int dataset[], int templeng

我的任务是获取数组输入之间的常量值。
我该怎么做呢?我使用了选择排序算法并搜索了值,但我知道这是错误的方法。

首先,25项。第一条注释是正确的,如果输入最大项数,则不会设置templength。通过一步一步地跟踪代码将显示这一点

关于输出中的bug。我会避免在数组索引中使用过多的偏移量。这使得代码更难理解,当然也更难调试。在这种情况下,偏移量也会导致注释中指出的非常短的数组出现问题。为什么不试试这样的方法呢:

int findconstant(int dataset[], int templength)
{
    int lcv;
    int constantvalue;
    if (templength <= 1) {
        return 0;
    }
    constantvalue = dataset[1] - dataset[0];
    for (lcv = 2; lcv < templength ; lcv++) {
        if ((dataset[lcv] - dataset[lcv-1]) != constantvalue) {
            return 0;
        }
    }
    return constantvalue;
} 
int findconstant(int数据集[],int模板长度)
{
国际lcv;
int常量值;

如果(templengthFirst,则为25项。第一条注释正确,如果输入最大项数,则不会设置templength。通过代码逐步跟踪将显示这一点

关于输出的错误。我会避免在数组索引中使用过多的偏移量。这会使代码更难理解,当然也更难调试。在这种情况下,偏移量也会给注释中指出的非常短的数组带来问题。为什么不尝试以下方法呢

int findconstant(int dataset[], int templength)
{
    int lcv;
    int constantvalue;
    if (templength <= 1) {
        return 0;
    }
    constantvalue = dataset[1] - dataset[0];
    for (lcv = 2; lcv < templength ; lcv++) {
        if ((dataset[lcv] - dataset[lcv-1]) != constantvalue) {
            return 0;
        }
    }
    return constantvalue;
} 
int findconstant(int数据集[],int模板长度)
{
国际lcv;
int常量值;


如果(templength当您输入25个值时,
templength
未设置。它也从未初始化,因此有一个未定义的垃圾值。您不需要
templength
从循环中中断并返回
lcv
。但是,在我的getdata函数中,我初始化了templength,并在lcv索引时将其设置为lcv。)x值是-1。我必须返回该值以在其他UDF中使用。很抱歉,我不明白您指出的是什么。@skyblade1234如果用户输入25个值,其中没有一个值是
-1
?不,您不需要初始化它。
int-templangth;
声明一个具有未定义值的局部变量。您输入-1时设置它,但在给定25个数字的特殊情况下,不会设置变量。请尝试并打印
getdataset
的返回值。如果(dataset[lcv]=-1 | | lcv==24){templength=lcv。当您输入25个值时,不会设置
templength
。它也从未初始化过,因此有一个未定义的垃圾值。您不需要
templength
break
跳出循环并返回
lcv
。但是,在我的getdata函数中,我初始化了templength,并在lcv索引值是-1。我必须返回该值以便在其他UDF中使用。很抱歉,我不明白您指的是什么。@skyblade1234如果用户输入25个值,其中没有一个值是
-1
?不,您不需要初始化它。
int templangth;
用未定义声明局部变量d值。您在输入-1时设置它,但在给定25个数字的特殊情况下,不会设置变量。请尝试并打印
getdataset
。如果(dataset[lcv]=-1 | | lcv==24)的返回值{templength=lcv。缺少
templength==1
的情况。是的,这样做了,谢谢,我将尝试修改代码,以便更容易理解。对于第一个if语句,当你说return 0时,这是否意味着constantvalue设置为0?返回0意味着什么?我从未在循环或构造中使用过它 before@BLUEPIXY:如果templength==1,将不执行循环,从而导致正确的answer@skyblade1234:从函数中提前返回是使代码更短、更简洁的好方法。在本例中,您使用0表示未找到常数,因此当检测到这些情况时,只需结束表示未找到常数的函数即可可以找到(0)。
constantvalue=dataset[1]-dataset[0];
:如果
templength==1
dataset[1]
不应使用。结果当然不正确。缺少
templength==1
的情况。是的,谢谢,我将尝试修改代码,以便更容易理解。对于第一个if语句,当您说return 0时,这是否意味着constantvalue被设置为0?返回0的意思是什么?Ive never在循环或构造中使用它before@BLUEPIXY:如果templength==1,将不执行循环,从而导致正确的answer@skyblade1234:从函数中提前返回是使代码更短、更简洁的好方法。在本例中,您使用0表示未找到常数,因此当检测到这些情况时,只需结束表示找不到常数的函数(0)。
constantvalue=dataset[1]-dataset[0];
:如果
templength==1
,则不应使用
dataset[1]
。当然,结果不正确。