数组和函数

时间:2009-08-25 16:43:02

标签: c++ visual-c++

我的作业要求我编写一个读取标题的函数,并将相应的费用返回给调用函数。如果标题不在列表中,请返回-1.0

这就是我现在所拥有的:

struct eventType 
{ 
    string title;
    double fees;
}; 

eventType eventTable[10];

int findFees (string newTitle, string newFees)
{
    int Index = 0;
    int flag;
    while (Index < 9) && (eventTable[Index].title != newTitle))
        Index = Index + 1;

    if (eventTable[Index].title == newTitle)
    {
        eventTable[Index].fees = newFees;
        flag = 0;
    }
    else
        flag = -1;

    return flag;
}

什么都不见了?

更新

在看了你们给出的建议之后,我采用并改变了代码:

double findFees (string title)
{
    for (int Index = 0 ; Index < 10 ; Index++)
    {
        if (eventTable[Index].title == title)
        {
            return eventTable[Index].fees;
        }
    }
    return -1.0;
}

我不确定这是否正确,但我不需要新的标题或新费用,因为这些值可以在eventTable中找到,然后返回。

修正?

7 个答案:

答案 0 :(得分:1)

我不想为你泄露答案,但这里有两点你应该记住:

如果有条件或循环,则需要在{和}中括起语句,以便编译器知道哪些语句进入循环内。

其次,C ++是一种类型安全的语言,这意味着如果要将变量分配给不同类型的值,程序将无法编译,查看代码并查看是否可以在前面找到任何错误

答案 1 :(得分:0)

应该是:

while (Index < 10)

你说它应该退还费用,但是找到后会返回0。 (这没关系,因为你要收费,为什么还要退还?)

我还会将函数的签名更改为:

int findFees (const string &newTitle, const string &newFees)

当你在它的时候,让它返回一个“bool”而不是一个标志来表示成功,因为:

if(findFees(blahTitle, blahFees))

听起来好多了:

if(findFees(blahTitle, blahFees) == 0)

检查是否找到了标题。

答案 2 :(得分:0)

在我看来,正如您所描述的那样,您的功能不会返还费用。 看起来它更新了eventTable,更改了存储在那里的费用,并在更新成功完成后返回一个标志。

请澄清。您想查找存储在eventTable中的费用并将其退回吗?或者您想用新数据更新eventTable?或者是两者的混合。

不过,对于一个菜鸟,你的代码结构合理,编写得相当好。

答案 3 :(得分:0)

我看到的唯一错误是

while (Index < 9) && (eventTable[Index].title != newTitle))

应该是:

while ((Index < 10) && (eventTable[Index].title != newTitle))

注意缺少'('。否则你错过了匹配数组中的最后一个条目。

我可能会写一下这样的函数:

double findFees (const string& title, double newFee)
{
    for (int i = 0; i < 10; i++)
    {
        if (eventTable[i].title == title)
        {
            eventTable[i].fees = newFee;
            return newFee;
        }
    }

    return -1.0;
}

这样,如果您已找到要搜索的项目,则不会遍历整个数组。

答案 4 :(得分:0)

你会这样简化它。

int flag = -1;
int Index = 0;

while(Index <= 9)
{
     if(eventTable[Index].title == newTitle)
     {
          eventTable[Index].fees = newFees;
          flag = 0
          break;
     }
}

return flag;

答案 5 :(得分:0)

eventTable[Index].fees = newFees;

这不起作用,因为费用是双倍而newFees是一个字符串。你也没有说过改变费用,所以我对这条线感到困惑。

如果您想要返回找到的项目的费用,您应该将return eventTable[Index].fees;放在该位置,并将该函数的返回值更改为浮动。

答案 6 :(得分:0)

您的描述(退还费用,如果没有找到-1.0)与您的代码不符:

struct eventType 
{ 
    string title;
    double fees;
}; 

eventType eventTable[10];

double findFees (string newTitle)
{
    for (int Index = 0 ; Index < 10 ; Index++)
    {
        if (eventTable[Index].title == newTitle)
        {
            return eventTable[Index].fees;
        }
    }
    return -1.0;
}