/** * fifteen.c * * Computer Science 50 * Problem Set 3 * * Implements Game of F
ID: 3596714 • Letter: #
Question
/** * fifteen.c * * Computer Science 50 * Problem Set 3 * * Implements Game of Fifteen (generalized to d x d). * * Using fifteen d * * wherebt the board's dimensions are to be d x d, * where d must be in [DIM_MIN,DIM_MAX] * * Note that usleep is obsolete, but it offers more granularity than * sleep and is simpler to use then nanosleep; man usleep for more. */ #define _XOPEN_SOURCE 500 #include #include #include #include // Restrictions #define DIM_MIN 3 #define DIM_MAX 3 // board int board[DIM_MAX][DIM_MAX]; // dimensions int d; // prototypes void clear(void); void greet(void); void init(void); void draw(void); int move(int tile); int won(void); int main(int argc, char* argv[]) { // ensure proper usage if (argc != 2) { printf("Usage: fifteen d "); return 1; } // ensure valid dimensions d = atoi(argv[1]); if (d < DIM_MIN || d > DIM_MAX) { printf("Board must be between %i x %i and %i x %i, inclusive. ", DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX); return 2; } // open log FILE* file =fopen("log.txt", "w"); if(file == NULL) { return 3; } // greet user with instructions greet(); // initialize the board init(); // accept moves until someone wins while (1) { // clear screen clear(); // draw the current state of the board draw(); // log the current state of the baord for (int j = 0; j < d; j++) { // fprintf(file, "%i", board[i][j]); if ( j < d - 1) { fprintf(file, "l"); } } fprintf(file, " "); } fflush(file); // check for win if (won()) { printf("ftw! "); exit(0); } // prompt for move printf("Tile to move: "); int tile = get_int(); // quit if user inputs 0 if (tile == 0) { exit(0); } // log the move fprintf(file, "%i ", tile); fflush(file); // move if possible else report illegal move if (!move(tile)) { printf(" illegal move. "); usleep(500000); } // sleep for animations sake usleep(500000); // close log fclose(file); return 0; } /** * Clears screen using ANSI escape sequences. * / * void clear(void) { clear(); printf("WELCOME TO GAME OF FIFTEEN "); usleep(200000); } /** * Initializes the game's board with tiles numbering 1 through d * d - 1 * (i.e., fills 2d array with values but does not actually print them). */ void init(void) { int counter = d * d, tmp = d; if(--counter % 2 != 0) { tmp--; for(int i = 0, j = d - 1; i < d - 3; i++, j--) board[d-1][i] = j; board[d - 1][d - 1] = 0; board[d - 1][d - 2] = 2; board[d - 1][d - 3] = 1; } for(int i = 0; i < tmp; i++) for(int j = 0; j < d; j++) { board[i][j] = counter --; } } /** Prints board in present state * */ void draw(void) { for(int i = 0; i < d; i++) { for(int j = 0; j < d; j++) { if(board[i][j] < 10) printf(" "); printf("%i", board[i][j]); } printf(" "); } } /** * If tile borders empty space, move tile and return true, else * returns false */ int move(int tile) { int x = - 1, y; for(int i = 0; i < d; i++) for(int j = 0; j < d; j++) if(board[i][j] == tile) { x = i; y = j; break; } if(x == -1) return 0; if(x-1 >= 0 && board[x-1][y] == 0) { board[x-1][y] = tile; board[x][y] = 0; return 1; } else if(x+1 < d && board[x+1][y] == 0) { board[x+1][y] = tile; board[x][y] = 0; return 1; } else if(y - 1 >= 0 && board[x][y-1] == 0) { board[x][y+1] = tile; board[x][y] = 0; return 1; } return 0; } /** * Returns true if the game is won * else false */ int won(void) { for(int i = 0; i < d; i ++) { for(int j = 0; j < d; j++) if(j+1 < d && board[i][j] > board[i][j+1]) return 0; if(i+1 < d && board[i][d-1] > board[i+1][0]) return 0; } int testArr[(d*d)]; int counter = 0; // put all 10 array for(int i = 0; counter < (d*d); i++){ for(int j = 0; j < d; j++ ){ testArr[counter++] = board[i][j]; } } //check for all array in ascending order for(int i = 0; i < counter - 2; i++) { if(testArr[i] > testArr[i+1]) { return 0; } } return 1; } how do I solve this error ? fifteen.c:135:1: error: '/*' within block comment [-Werror,-Wcomment] /** ^ 1 error generated. make: *** [fifteen] Error 1
Explanation / Answer
Your code is distorted. Not able to find what error is in line 135:1
I found only one problem that is usage of get_int() function and that because of there is not c library installed in your system to resolve get_int(). Use scanf to read integer from stdin.
Here is the resolved code aligned properly. Put a comment if you need further clarification.
/**************************/
/*
* fifteen.c
*
* Created on: 20-Oct-2017
* Author:
*/
/**
*
* * fifteen.c *
* * Computer Science 50
* * Problem Set 3
* * Implements Game of Fifteen (generalized to d x d). *
* * Using fifteen d *
* * wherebt the board's dimensions are to be d x d,
* * where d must be in [DIM_MIN,DIM_MAX]
* * * Note that usleep is obsolete, but it offers more granularity than
* * sleep and is simpler to use then nanosleep; man usleep for more.
* */
#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <cstdint>
// Restrictions
#define DIM_MIN 3
#define DIM_MAX 3
// board
int board[DIM_MAX][DIM_MAX];
// dimensions
int d;
// prototypes
void clear(void);
void greet(void);
void init(void);
void draw(void);
int move(int tile);
int won(void);
int main(int argc, char* argv[])
{
// ensure proper usage
if (argc != 2)
{
printf("Usage: fifteen d ");
return 1;
}
// ensure valid dimensions
d = atoi(argv[1]);
if (d < DIM_MIN || d > DIM_MAX)
{
printf("Board must be between %i x %i and %i x %i, inclusive. ",
DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX);
return 2;
}
// open log
FILE* file =fopen("log.txt", "w");
if(file == NULL)
{
return 3;
}
// greet user with instructions
greet();
// initialize the board
init();
// accept moves until someone wins
while (1)
{
// clear screen
clear();
// draw the current state of the board
draw();
// log the current state of the baord
for (int j = 0; j < d; j++)
{
// fprintf(file, "%i", board[i][j]);
if ( j < d - 1)
{
fprintf(file, "l");
}
}
fprintf(file, " ");
}
fflush(file);
// check for win
if (won())
{
printf("ftw! ");
exit(0);
}
// prompt for move
printf("Tile to move: ");
// int tile = get_int();
int tile;
scanf("%d",&tile);
// quit if user inputs 0
if (tile == 0)
{
exit(0);
}
// log the move
fprintf(file, "%i ", tile);
fflush(file);
// move if possible else report illegal move
if (!move(tile))
{
printf(" illegal move. ");
usleep(500000);
}
// sleep for animations sake
usleep(500000);
// close log
fclose(file);
return 0;
}
/** * Clears screen using ANSI escape sequences. * / * */
void clear(void)
{
clear();
printf("WELCOME TO GAME OF FIFTEEN ");
usleep(200000);
}
/** * Initializes the game's board with tiles numbering 1 through d * d - 1 *
* (i.e., fills 2d array with values but does not actually print them). */
void init(void)
{
int counter = d * d, tmp = d;
if(--counter % 2 != 0)
{ tmp--;
for(int i = 0, j = d - 1; i < d - 3; i++, j--)
board[d-1][i] = j;
board[d - 1][d - 1] = 0;
board[d - 1][d - 2] = 2;
board[d - 1][d - 3] = 1;
}
for(int i = 0; i < tmp; i++)
for(int j = 0; j < d; j++)
{ board[i][j] = counter --; }
}
/** Prints board in present state * */
void draw(void)
{
for(int i = 0; i < d; i++)
{
for(int j = 0; j < d; j++)
{
if(board[i][j] < 10)
printf(" ");
printf("%i", board[i][j]);
}
printf(" ");
}
}
/** * If tile borders empty space, move tile and return true, else * returns false */
int move(int tile)
{
int x = - 1, y;
for(int i = 0; i < d; i++)
for(int j = 0; j < d; j++)
if(board[i][j] == tile)
{
x = i;
y = j;
break;
}
if(x == -1)
return 0;
if(x-1 >= 0 && board[x-1][y] == 0)
{
board[x-1][y] = tile;
board[x][y] = 0;
return 1;
}
else if(x+1 < d && board[x+1][y] == 0)
{
board[x+1][y] = tile;
board[x][y] = 0;
return 1; }
else if(y - 1 >= 0 && board[x][y-1] == 0)
{
board[x][y+1] = tile;
board[x][y] = 0;
return 1;
}
return 0;
}
/** * Returns true if the game is won * else false */
int won(void)
{
for(int i = 0; i < d; i ++)
{
for(int j = 0; j < d; j++)
if(j+1 < d && board[i][j] > board[i][j+1])
return 0;
if(i+1 < d && board[i][d-1] > board[i+1][0])
return 0;
}
int testArr[(d*d)];
int counter = 0;
// put all 10 array
for(int i = 0; counter < (d*d); i++)
{
for(int j = 0; j < d; j++ )
{
testArr[counter++] = board[i][j];
}
}
//check for all array in ascending order
for(int i = 0; i < counter - 2; i++)
{
if(testArr[i] > testArr[i+1])
{
return 0;
}
}
return 1;
}
/*
//how do I solve this error ?
fifteen.c:135:1: error: '/*' within block comment [-Werror,-Wcomment]
^ 1 error generated. make: *** [fifteen] Error 1
*/
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.