我有一个问题,此功能(战舰游戏的一部分),在其中将通过它运行一次完全正常,但在后续执行,它将跳过用户输入:C:功能跳过代码
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);
}
http://www.gidnetwork.com/b -60.html – 2012-02-25 05:22:42
http://c-faq.com/stdio/scanfc.html ...为了爱上帝,请停止使用'scanf'。 – jamesdlin 2012-02-25 05:29:35