我在试着创造一个游戏。为了做到这一点,我有两个函数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()请求用户所需的列。在矩阵中输入网格的大小,它返回的字符应该是A到D(4 4网格)和A到H(8 8网格)。
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):
我真的很想知道这种重复是否来自。
感谢所有愿意帮忙的人!
发布于 2022-05-04 12:17:33
您真的不应该使用scanf作为用户输入。在本例中,解决方案非常简单:您需要使用空白。在用户输入第一个数字后,仍有一个换行符要从输入流中读取。scanf在ask_column中读取它并看到它不是所需的条目之一,因此再次写入提示符。为了避免这个问题,简单的解决方案是在转换说明符中添加一些空格:
scanf(" %c", &column);但这不是一个好的解决办法。考虑当有人按大小输入W时,程序的行为。程序将立即进入无限循环,不断尝试读取整数,但当它看到W不是int中的有效字符时总是停止。您必须添加一些输入验证并使用无效数据。scanf并不是最好的工具,如果你现在停止使用它,你的生活从长远来看会容易得多。
https://stackoverflow.com/questions/72112591
复制相似问题