gpt4 book ai didi

C: 函数跳过代码中的用户输入

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:22 25 4
gpt4 key购买 nike

我在使用这个函数(战舰游戏的一部分)时遇到问题,它会完美地运行一次,但在随后的执行中,它会跳过:

    scanf("%c",&rChar);

出于某种原因,rChar 在没有用户从上面的代码输入的情况下变成了另一个值。我尝试在整个函数中放入显示 rChar 值的 printf 语句。

函数 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);

请记住,它只发生在第一次之后。即使我在每次迭代后重新初始化变量 rCharrcdir,这个问题仍然存在.我 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);

}

最佳答案

您的程序打印此提示:

please enter the row you want to place your 2 ship in

并调用scanf。您键入 5 并按回车键。您输入了两个 字符:5 和换行符\n。 (或者可能是 Windows 上的 \r。)该换行符位于输入缓冲区中,直到下一次调用 scanf 时,它会读取换行符并立即返回,而无需您需要输入更多信息。

你可以让 scanf 在读取单个字符时跳过换行符(和其他空格),方法是在 %c 说明符前放置一个空格,如下所示:

scanf(" %c", &c);

关于C: 函数跳过代码中的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com