C - send () не работает при назначении значения в операторе switch - PullRequest
0 голосов
/ 02 марта 2019

Это базовая программа, которая общается с сервером.Он просит клиента ввести либо R, P, либо S, а затем отправит ответ (1, 2 или 3).Сервер примет собственное решение, примет решение игроков, подсчитает победителя и затем отправит победителя обратно.

Вот мой код для отправки его с клиента на сервер.

 char choice[1];
bool done = false;
while (!done) {
    printf("Rock = R , Paper = P, and Scissors = S\n");
    printf("Enter your choice:");
    scanf("%s", decision);

    switch (decision[0]) {
        case 'R' :
            decision[0] = '\0';
            choice[0] = '1';
            done = true;
            break;

        case 'P' :
            decision[0] = '\0';
            choice[0] = '2';
            done = true;
            break;

        case 'S' :
            decision[0] = '\0';
            choice[0] = '3';
            done = true;
            break;

        default :
            decision[0] = '\0';
            printf("That is not a correct entry. Please try again.\n");

    }
}

char *sendChoice = &choice[0];
//*((char*)choice) = '1';
printf("Player Choice: %c\n", *sendChoice);

if (send(clientSocket, sendChoice, strlen(sendChoice), 0) < 0){
printf("send error\n");
}

Независимо от того, что я делаю, я получаю ошибку отправки.Я перепробовал все, что мог думать.Я искал в Интернете все, что может помочь, и я просто не могу понять, почему это не работает.

Если я закомментирую переключатель и цикл while и просто жестко запишу выбор клиента, он будет работать, поэтому он должен иметь какое-то отношение к оператору switch.

Должен отметить, что соединение работает.Это просто функция отправки, которая не работает.

1 Ответ

0 голосов
/ 02 марта 2019

Функция strlen предназначена только для строк.В вашем коде choice - это массив из одного символа, а не строка.И sendChoice - указатель на этот единственный символ.

Длина данных равна единице.Вы можете просто передать 1 в качестве размера или вы можете использовать sizeof(choice).Не используйте sizeof(sendChoice), так как это будет размер указателя!Вы не можете использовать strlen, потому что у вас нет строки.

Если вы подумаете об этом, strlen не сможет сказать только по указателю, который вы ему передали, что он указывает только на одинперсонаж.Так что strlen может работать только с помощью какой-то магии.

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

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