Я продолжаю получать контроль достигает конца не пустую функцию.Что я делаю неправильно? - PullRequest
2 голосов
/ 01 апреля 2010
location pick(void){    // generates a random location
     location get;
     get.x = rand() % FIELD_SIZE + 1;
     int forY = rand() % FIELD_SIZE +1;
    switch(forY){
    case 1:
        get.y = 'a';
            break;
    case 2:
        get.y = 'b';
            break;
    case 3:
        get.y = 'c';
            break;
    case 4:
        get.y = 'd';
            break;
    case 5:
        get.y = 'e';
            break;
    }

}

Ответы [ 6 ]

9 голосов
/ 01 апреля 2010

Вам не хватает return get; в конце вашей функции.

6 голосов
/ 01 апреля 2010

Убедитесь, что return get; в вашей функции!

В противном случае вы хотите объявить вашу функцию как void pick.

1 голос
/ 01 апреля 2010

Ваша функция, как написано, ничего не возвращает, но объявлено, что она возвращает location. Вы, вероятно, хотите return get; в конце, как сказал Марк.

1 голос
/ 01 апреля 2010

Возвращаете ли вы значение из своей функции?

0 голосов
/ 02 апреля 2010

Хм ... теперь, когда вам сказали, как решить проблему, вот как я написал бы код:

location pick(void){    // generates a random location
     location get;
     get.x = rand() % FIELD_SIZE + 1;
     get.y = rand() % FIELD_SIZE +'a';
     return get;
}

Чисто теоретически, это не совсем переносимо - буквы не обязательно должны быть смежными. В действительности, единственное известное место, где они не являются смежными, это EBCDIC, и оно непрерывно в диапазоне, который вы используете. Однако, если вы действительно обеспокоены этим, вы можете сделать что-то вроде:

location pick(void){    // generates a random location
     static char letters[] = "abcdef";
     location get;
     get.x = rand() % FIELD_SIZE + 1;
     get.y = letters[rand() % FIELD_SIZE];
     return get;
}
0 голосов
/ 01 апреля 2010

Возможно, вы захотите передать элемент location по ссылке на функцию. Это может уменьшить размер стека :

void pick(location& get)
{
     get.x = rand() % FIELD_SIZE + 1;
     int forY = rand() % FIELD_SIZE +1;
    switch(forY){
    case 1:
        get.y = 'a';
            break;
    case 2:
        get.y = 'b';
            break;
    case 3:
        get.y = 'c';
            break;
    case 4:
        get.y = 'd';
            break;
    case 5:
        get.y = 'e';
            break;
    }
    return;
}

Кроме того, подумайте о случае default в вашем выражении switch. Обработка ошибок теперь поможет избежать потери времени на дальнейшую отладку.

Еще одно предложение: преобразовать оператор switch в таблицу. Это позволяет изменять таблицу без необходимости изменения кода (и повторного тестирования функции). Это может быть расширено до помещения данных во внешний файл. Внешний файл позволяет вносить изменения в данные без необходимости перестраивать программу.

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