C - Do-while 后跟一个带有 int 案例的 switch。验证不好

标签 c validation input case do-while

我正在尝试在切换之前执行一段时间,以便我确定用户输入将匹配其中一个案例。但是我在这里遇到了 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 检测 55a。我建议使用 strtol()相反

long int strtol (const char *str, char **endptr, int base);

使用值 endPtr 确保您的输入符合预期。

关于C - Do-while 后跟一个带有 int 案例的 switch。验证不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390230/

相关文章:

c - Algo - 要解析的键值表达式 (C)

C预处理器它是如何工作的

c - 程序收到信号 : “EXC_BAD_ACCESS”

更改标签文本的 Asp.net 验证错误消息

ruby-on-rails - rails : validate fields on association

jquery - 为什么 jQuery val() 函数不更新属性 'value' ?

c - gcc -O3 标志会导致警告 -O2 不会

HTML5 验证错误 : body start tag seen but an element of the same type was already open

javascript - 滚动到 html 输入的插入符位置

forms - 如何在 Ember.js 应用程序中获取输入值?