我正在尝试在切换之前执行一段时间,以便我确定用户输入将匹配其中一个案例。但是我在这里遇到了 1 个问题。
例如,如果我给出输入“5a”,它仍将使用 5 来执行案例 5。我如何验证它以便用户只能提供准确的数字作为输入?
int move;
char validation[50];
do {
printf("Input must be from 1 to 8:\n");
fgets(validation, sizeof(validation), stdin);
move = atoi(validation);
}
while (move < 1 || move > 8);
switch (move) {
case 1:
dx = -1;
dy = -1;
break;
case 2:
dx = 0;
dy = -1;
break;
case 3:
dx = 1;
dy = -1;
break;
case 4:
dx = 1;
dy = 0;
break;
case 5:
dx = 1;
dy = 1;
break;
case 6:
dx = 0;
dy = 1;
break;
case 7:
dx = -1;
dy = 1;
break;
case 8:
dx = -1;
dy = 0;
break;
}
最佳答案
您无法使用 atoi 检测 5
与 5a
。我建议使用 strtol()
相反
long int strtol (const char *str, char **endptr, int base);
使用值 endPtr
确保您的输入符合预期。
关于C - Do-while 后跟一个带有 int 案例的 switch。验证不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390230/