Jul 8, 2019 at 3:02pm UTC
what is the function of cin.ignore and cin.get at this program?
location : 57-58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
#include <iostream>
#include <stdlib.h>
using namespace std;
char square[10] = {'o' ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' };
int checkwin();
void board();
int main()
{
int player = 1,i,choice;
char mark;
do
{
board();
player=(player%2)?1:2;
cout << "Player " << player << ", enter a number: " ;
cin >> choice;
mark=(player == 1) ? 'X' : 'O' ;
if (choice == 1 && square[1] == '1' )
square[1] = mark;
else if (choice == 2 && square[2] == '2' )
square[2] = mark;
else if (choice == 3 && square[3] == '3' )
square[3] = mark;
else if (choice == 4 && square[4] == '4' )
square[4] = mark;
else if (choice == 5 && square[5] == '5' )
square[5] = mark;
else if (choice == 6 && square[6] == '6' )
square[6] = mark;
else if (choice == 7 && square[7] == '7' )
square[7] = mark;
else if (choice == 8 && square[8] == '8' )
square[8] = mark;
else if (choice == 9 && square[9] == '9' )
square[9] = mark;
else
{
cout<<"Invalid move " ;
player--;
cin.ignore();
cin.get();
}
i=checkwin();
player++;
}while (i==-1);
board();
if (i==1)
cout<<"==>\aPlayer " <<--player<<" win " ;
else
cout<<"==>\aGame draw" ;
cin.ignore();
cin.get();
return 0;
}
/*********************************************
FUNCTION TO RETURN GAME STATUS
1 FOR GAME IS OVER WITH RESULT
-1 FOR GAME IS IN PROGRESS
O GAME IS OVER AND NO RESULT
**********************************************/
int checkwin()
{
if (square[1] == square[2] && square[2] == square[3])
return 1;
else if (square[4] == square[5] && square[5] == square[6])
return 1;
else if (square[7] == square[8] && square[8] == square[9])
return 1;
else if (square[1] == square[4] && square[4] == square[7])
return 1;
else if (square[2] == square[5] && square[5] == square[8])
return 1;
else if (square[3] == square[6] && square[6] == square[9])
return 1;
else if (square[1] == square[5] && square[5] == square[9])
return 1;
else if (square[3] == square[5] && square[5] == square[7])
return 1;
else if (square[1] != '1' && square[2] != '2' && square[3] != '3'
&& square[4] != '4' && square[5] != '5' && square[6] != '6'
&& square[7] != '7' && square[8] != '8' && square[9] != '9' )
return 0;
else
return -1;
}
/*******************************************************************
FUNCTION TO DRAW BOARD OF TIC TAC TOE WITH PLAYERS MARK
********************************************************************/
void board()
{
system("cls" );
cout << "\n\n\tTic Tac Toe\n\n" ;
cout << "Player 1 (X) - Player 2 (O)" << endl << endl;
cout << endl;
cout << " | | " << endl;
cout << " " << square[1] << " | " << square[2] << " | " << square[3] << endl;
cout << "_____|_____|_____" << endl;
cout << " | | " << endl;
cout << " " << square[4] << " | " << square[5] << " | " << square[6] << endl;
cout << "_____|_____|_____" << endl;
cout << " | | " << endl;
cout << " " << square[7] << " | " << square[8] << " | " << square[9] << endl;
cout << " | | " << endl << endl;
}
/*******************************************************************
END OF PROJECT
********************************************************************/
Last edited on Jul 8, 2019 at 3:17pm UTC
Jul 8, 2019 at 3:10pm UTC
Edit your post and put code tags around your code like this:
[co de]
your code here
[/code]
Do you know what cin.get() does? Have you read the manual page?
Do you know what cin.ignore() does? Have you read the manual page?
Last edited on Jul 8, 2019 at 3:12pm UTC
Jul 8, 2019 at 3:18pm UTC
yes i already read some information about what cin.get and cin.ignore do, but still cant figure it out about the conection in this program
Jul 8, 2019 at 3:28pm UTC
The operator>> leaves a newline in the stream. So if you call get() without ignore() the get() function would return immediately. It shouldn't hence the ignore() which removes the newline.
Jul 8, 2019 at 3:47pm UTC
As coder777 said, except that proper structure would dictate putting the cin.ignore()
after the cin >> choice
, since that statement should clean up after itself. Then it's not needed (and in fact an error) in the other places.
This code is very badly written. Not good code to study.
Last edited on Jul 8, 2019 at 3:47pm UTC
Jul 8, 2019 at 4:02pm UTC
oh ok guys thx, i understand a litle bit