重复 printf()
Repetition of a printf()
我正在尝试创建游戏。为此,我有两个函数 size() 和 ask_column().
Size() 询问用户想要的网格的大小。它 return 应该是 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() 询问用户想要的列。您在矩阵中输入网格的大小,它 return 一个字符,如果 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);
}
Return :
Type the size of Takuzu that you want (only 44 and 88 are available):
4
Enter the column of the value you want to enter (A to D):
Enter the column of the value you want to enter (A to D):
int main()
{
int s;
s = 4;
ask_column(s);
}
Return :
Enter the column of the value you want to enter (A to D):
我真的很想知道这种重复是从哪里来的。
感谢所有愿意提供帮助的人!
您真的不应该使用 scanf
进行用户输入。在这种情况下,解决方案非常简单:您需要使用空格。用户输入第一个数字后,还有一个换行符需要从输入流中读取。 ask_column
中的scanf
读取,发现不是想要的条目之一,于是又写了提示。为避免该问题,简单的解决方案是在转换说明符中添加一些空格:
scanf(" %c", &column);
但这不是一个好的解决方案。当有人为大小输入 W
时,请考虑您的程序的行为。该程序将立即进入无限循环,不断尝试读取整数,但总是在发现 W
不是 int 中的有效字符时停止。您必须添加一些输入验证并使用无效数据。 scanf
根本不是最好的工具,如果你现在停止使用它,从长远来看 运行 你的生活会容易得多。
我正在尝试创建游戏。为此,我有两个函数 size() 和 ask_column().
Size() 询问用户想要的网格的大小。它 return 应该是 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() 询问用户想要的列。您在矩阵中输入网格的大小,它 return 一个字符,如果 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);
}
Return :
Type the size of Takuzu that you want (only 44 and 88 are available): 4 Enter the column of the value you want to enter (A to D): Enter the column of the value you want to enter (A to D):
int main()
{
int s;
s = 4;
ask_column(s);
}
Return :
Enter the column of the value you want to enter (A to D):
我真的很想知道这种重复是从哪里来的。
感谢所有愿意提供帮助的人!
您真的不应该使用 scanf
进行用户输入。在这种情况下,解决方案非常简单:您需要使用空格。用户输入第一个数字后,还有一个换行符需要从输入流中读取。 ask_column
中的scanf
读取,发现不是想要的条目之一,于是又写了提示。为避免该问题,简单的解决方案是在转换说明符中添加一些空格:
scanf(" %c", &column);
但这不是一个好的解决方案。当有人为大小输入 W
时,请考虑您的程序的行为。该程序将立即进入无限循环,不断尝试读取整数,但总是在发现 W
不是 int 中的有效字符时停止。您必须添加一些输入验证并使用无效数据。 scanf
根本不是最好的工具,如果你现在停止使用它,从长远来看 运行 你的生活会容易得多。