1

私はネットワーク プログラミング プロジェクトに取り組んでおり、クライアント サーバーのじゃんけんコードを記述しています。コードを完成させましたが、この行をコードに追加する前のテストでは問題なく動作していました。

findWinner(gameType,pcChoice);

コードに行を追加すると、サーバー側からのセグメンテーション違反に関するエラーがコードに表示され始めました。これは私が行を追加した場所です。

while(1)
{
    int gameType;
    printf("Paper, Scissors, Rock game start.\n");

    rc = read(client_sockfd, &gameType, 1);       
srand(time(NULL));
pcChoice = (rand() % 3)+1;
findWinner(gameType,pcChoice);
    gameType  = pcChoice;
    write(client_sockfd, &gameType, 1);

}

私はCのアマチュアで、何をすべきかわかりません。

int pcChoice;

1から3までのランダムな整数を保持する整数です(ジャンケンまたはハサミ)

findwinner():

void findWinner(int player,int pc)
{
const char *items[3]={"Paper","Scissors","Rock"};
printf("Client: %s\n",items[player-1]);
printf ("Computer: %s\n",items[pc-1]);

switch (player)
{
    case 1:
        switch (pc)
        {
            case 1:
                printf("it is a DRAW\n");
                break;
            case 2:
                printf("Computer Wins\n");
                break;
            case 3:
                printf("Computer Loses\n");
                break;
            default:
                printf("ERROR\n");
                exit(0);
        };
        break;
    case 2:
        switch (pc)
        {
            case 1:
                printf("Computer Loses\n");
                break;
            case 2:
                printf("it is a DRAW\n");
                break;
            case 3:
                printf("Computer Wins\n");
                break;
            default:
                printf("ERROR\n");
                exit(0);
        };
        break;
    case 3:
        switch (pc)
        {
            case 1:
                printf("Computer Wins\n");
                break;
            case 2:
                printf("Computer Loses\n");
                break;
            case 3:
                printf("it is a draw\n");
                break;
            default:
                printf("ERROR\n");
                exit(0);
        };
        break;
    default:
        printf("ERROR\n");
        exit(0);
}
}
4

1 に答える 1

2
while(1)
{
    int gameType;
    printf("Paper, Scissors, Rock game start.\n");

    rc = read(client_sockfd, &gameType, sizeof(gameType));       
    srand(time(NULL));
    pcChoice = (rand() % 3)+1;
    findWinner(gameType,pcChoice);
    gameType  = pcChoice;
    write(client_sockfd, &gameType, sizeof(gameType));

}

問題になる可能性のある他のものは次のとおりです。

明示的なヌル終了を試みますchar*

const char *items[3]={"Paper\0","Scissors\0","Rock\0"};

プレーヤーが負または 3 より大きいことはありませんか?

printf("Client: %s\n",items[player-1]);
printf ("Computer: %s\n",items[pc-1]);
于 2012-11-30T06:57:24.010 に答える