Я программирую на c.
Функцией моего кода является проверка программы ti c ta c toe. По сути, я использую 2d 3x3 игровую доску и передаю ее нескольким потокам, чтобы проверить победителя.
Я дошел до того, что каждая строка, столбец и диагональ используют pthread для проверки X или O на победителя. (Просто сюда включены строки для удобства, но есть и 5 других потоков). Однако я продолжаю сталкиваться с ошибкой сегментации.
Я пытался использовать указатели вместо ссылки на игровую доску и другие онлайн-решения, но пока мне не повезло.
Запуск программы с использованием g cc -pthread tictactoe. c
Может действительно использовать некоторую помощь. Я студент, и я действительно изо всех сил .. Спасибо
(Также, пожалуйста, не копайтесь в моем интервале, копирование из разных систем испортило все это)
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
//#include <sys/types.h>
#include <unistd.h>
#define BUFFSIZE 5
void *Row1(char game[3][3]){//checks row1
if(game[0][0]=='X'&&game[0][1]=='X'&&game[0][2]=='X'){//first row
printf("Player X is the winner!");
exit(0);
}
else if(game[0][0]=='O'&&game[0][1]=='O'&&game[0][2]=='O'){//first row
printf("Player O is the winner!");
exit(0);
}
return 0;
}//end of row1 function
void *Row2(char game[3][3]){//checks row2
if(game[1][0]=='X'&&game[1][1]=='X'&&game[1][2]=='X'){//second row
printf("Player X is the winner!");
exit(0);
}
else if(game[1][0]=='O'&&game[1][1]=='O'&&game[1][2]=='0'){//second row
printf("Player 0 is the winner!");
exit(0);
}
return 0;
}//end of row2 function
void *Row3(char game[3][3]){//checks row3
if(game[2][0]=='X'&&game[2][1]=='X'&&game[2][2]=='X'){//third row
printf("Player X is the winner!");
exit(0);
}
else if(game[2][0]=='O'&&game[2][1]=='0'&&game[2][2]=='O'){//third row
printf("Player 0 is the winner!");
exit(0);
}
return 0;
}//end of row3 function
int main ()
{
//creating 2d array for game
char game[3][3];
int row=0;
int col=0;
char buff[BUFFSIZE];
FILE* fptr; //creating the file to be used
if ((fptr = fopen ("//home//dominique//tictacfile.txt", "r")) == NULL)
{
//lets me know if there's an error
printf ("Error opening file..");
exit (0);
}
for(row=0; row<3; row++){
fgets(buff, BUFFSIZE, fptr);
for(col=0; col<3; col++){
game[row][col]=buff[col];
}
}
for(row=0;row<3;row++) {
for (col=0;col<3;col++){
printf("game[%d][%d] = %c\n" , row , col, game[row][col]);// using this to check for correct input
}
col=0;
}
int err;
pthread_t row1, row2, row3, col1, col2, col3, diag1, diag2; //initalizing pthread
//row1 checker
err = pthread_create(&(row1), NULL, Row1(game), NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
//row2 checker
err = pthread_create(&(row2), NULL, Row2(game), NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
//row3 checker
err = pthread_create(&(row3), NULL, Row3(game), NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
}