У меня возникла проблема с этой функцией (частью игры «Морской бой»), когда она однажды будет прекрасно проходить через нее, но в последующих выполнениях она пропускает:
scanf("%c",&rChar);
По какой-то причине rChar превращается в другое значение без ввода пользователем кода выше.
Я попытался вставить в printf
операторы, показывающие значение rChar во всей функции.
Функция Conv_rChar_Int()
конвертирует Char, введенный пользователем, в целочисленное значение. Но поскольку rChar
не передается в качестве указателя, значение rChar
остается неизменным до тех пор, пока пользователь не заменит его на следующей итерации. (Проверено еще раз с printf
). Странная вещь, это меняется прямо между этими строками кода. и никогда не запрашивает у пользователя rChar
.
printf("please enter the row you want to place your %d ship in\n",length);
scanf("%c",&rChar);
Помните, это происходит только ПОСЛЕ первого раза. Даже если я переинициализирую переменные rChar
, r
, c
и dir
после каждой итерации, эта проблема все еще возникает.
Я на 99% уверен, что проблема в этой функции, а не в какой-либо из функций, вызываемых внутри нее (потому что rChar
остается неизменным после каждой отдельной строки, за исключением двух строк выше).
Заранее спасибо за помощь. Если у вас есть какие-либо вопросы по поводу кода, я постараюсь объяснить его подробнее.
int Gen_Ship_Place(int length, int flag3, int PlayGrid[10][10]){
int ShipPlaceFlag = 0;
//coordinates and direction
int r;
char rChar;
int c;
int dir;
//this loops until a ship location is found
while(ShipPlaceFlag == 0)
{
//enters row
printf("please enter the row you want to place your %d ship in\n",length);
scanf("%c",&rChar);
r = Conv_rChar_Int(rChar);
//adjusts row
r--;
//enter column
printf("please enter the column you want to place your %d ship in\n",length);
scanf("%d",&c);
//adjust column
c--;
//enter direction
printf("please enter the direction you want your %d ship to go\nwith\n0 being north\n1 being east\n2 being south\n3 being west\n",length);
scanf("%d",&dir);
//checks ship placement
ShipPlaceFlag = Check_Ship_Place(length,dir,flag3,r,c,PlayGrid);
//tells player if the location is wrong or not
if(ShipPlaceFlag == 0)
{
printf("****the location and direction you have chosen is invalid please choose different coordinates, here is your current board*****\n\n");
}
else
{
printf("****great job, here is your current board*****\n\n");
}
//prints grid so player can check it for their next move
Print_Play_Grid(PlayGrid);
}