我正在嘗試創建一個游戲。為了做到這一點,我有兩個函式 size() 和 ask_column()。
Size() 詢問用戶想要的網格大小。它回傳應該是 4 或 8 的數字。
int size() /*Ask for the size of the Takuzu that the user wants*/
{
int size;
do {
printf("Type the size of Takuzu that you want (only 4*4 and 8*8 are available): \n");
scanf("%d",&size);
}while(size != 4 && size != 8);
return(size);
}
Ask_column() 詢問用戶所需的列。您在矩陣中輸入網格的大小,它回傳一個字符,如果 4 4 網格應該是 A 到 D,如果 8 8 網格應該是 A 到 H。
char ask_column(int s) /*Ask the user in which column he wants to put his value*/
{
char column;
if (s==4)
{
do { /*Ask for the column if 4*4*/
printf("Enter the column of the value you want to enter (A to D): \n");
scanf("%c", &column);
} while (column != 'A' && column != 'B' && column != 'C' && column != 'D' && column != 'a' && column != 'b' &&
column != 'c' && column != 'd');
}
else
{
do { /*Ask for the column if 8*8*/
printf("Enter the column of the value you want to enter (A to H): \n");
scanf("%c", &column);
} while (column != 'A' && column != 'B' && column != 'C' && column != 'D' && column != 'E' && column != 'F' &&
column != 'G' && column != 'H' && column != 'a' && column != 'b' && column != 'c' && column != 'd' && column != 'e' && column != 'f' &&
column != 'g' && column != 'h');
}
return column;
}
我遇到的主要問題是重復了 Ask_column() 中的問題。如果使用 size(),ask_column() 將始終詢問問題 2 次。如果不只是我想要的一個。
int main()
{
int s;
s = size();
ask_column(s);
}
回傳 :
輸入您想要的 Takuzu 尺寸(只有 4 4 和 8 8 可用): 4 輸入您要輸入的值的列(A 到 D):輸入您要輸入的值的列(A 到 D ):
int main()
{
int s;
s = 4;
ask_column(s);
}
回傳 :
輸入要輸入的值的列(A 到 D):
我真的很想知道這種重復是從哪里來的。
感謝所有愿意提供幫助的人!
uj5u.com熱心網友回復:
你真的不應該scanf
用于用戶輸入。在這種情況下,解決方案非常簡單:您需要使用空格。用戶輸入第一個數字后,還有一個換行符要從輸入流中讀取。scanf
inask_column
讀取它并看到它不是所需的條目之一,因此再次寫入提示。為了避免這個問題,簡單的解決方案是在轉換說明符中添加一些空格:
scanf(" %c", &column);
但這不是一個好的解決方案。當有人輸入W
該尺寸時,請考慮您的程式的行為。程式將立即進入無限回圈,不斷嘗試讀取整數,但當它發現它W
不是 int 中的有效字符時總是停止。您必須添加一些輸入驗證并使用無效資料。 scanf
根本不是最好的工具,如果你現在停止使用它,從長遠來看,你的生活會容易得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470324.html