我有一個問題,此功能(戰艦遊戲的一部分),在其中將通過它運行一次完全正常,但在後續執行,它將跳過用戶輸入: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