массивы и функции - PullRequest
       46

массивы и функции

0 голосов
/ 25 августа 2009

мое назначение требует от меня написать функцию, которая читает заголовок и возвращает соответствующую плату вызывающей функции. если заголовка нет в списке, вернуть -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 ]

1 голос
/ 25 августа 2009

Я не хочу давать вам ответ, но вот две вещи, которые вы должны иметь в виду:

Если у вас есть условие или цикл, вам нужно заключить операторы в {и}, чтобы компилятор знал, какие операторы идут внутри цикла.

Во-вторых, C ++ - это типобезопасный язык. Это означает, что если вы присваиваете переменные значению другого типа, ваша программа не будет компилироваться, просматривайте ваш код и посмотрите, сможете ли вы найти что-то неправильное в этом отношении.

0 голосов
/ 25 августа 2009

Ваше описание (возврат комиссии или -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;
}
0 голосов
/ 25 августа 2009
eventTable[Index].fees = newFees;

Это не сработает, потому что плата удваивается, а newFees - строка. Кроме того, вы ничего не сказали об изменении сборов, поэтому я смущен этой строкой.

Если вы хотите вернуть комиссионные за найденный вами товар, вам нужно просто поставить return eventTable[Index].fees; в этой точке и изменить возвращаемое значение функции на float.

0 голосов
/ 25 августа 2009

Вы могли бы упростить это так.

int flag = -1;
int Index = 0;

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

return flag;
0 голосов
/ 25 августа 2009

Я вижу только ошибку

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;
}

Таким образом, вы не будете выполнять итерацию по всему массиву, если уже нашли элемент, который искали.

0 голосов
/ 25 августа 2009

Мне кажется, ваша функция не возвращает комиссионные, как вы описали. Похоже, что он обновляет eventTable, изменяя плату, хранящуюся там, и возвращает флаг, если обновление было выполнено успешно.

Пожалуйста, уточните. Хотите найти плату, хранящуюся в eventTable, и вернуть ее? Или вы хотите обновить eventTable новыми данными? Или гибрид обоих.

Тем не менее, для новичка, ваш код хорошо структурирован и достаточно хорошо написан.

0 голосов
/ 25 августа 2009

Должно быть:

while (Index < 10)

И вы сказали, что должны вернуть комиссию, но при обнаружении она возвращает 0. (Это нормально, так как вы проходите гонорар, зачем его возвращать?)

Я бы также изменил сигнатуру функции на:

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

и пока он у вас, пусть он возвращает "bool" вместо флага для обозначения успеха, поскольку:

if(findFees(blahTitle, blahFees))

звучит намного лучше, чем:

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

при проверке того, найден ли заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...