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]
。当然,结果不正确。