如何阻止用户在C中输入char作为int输入

Not*_*mer 1 c user-input

这是我的代码的一部分:

    printf("\nEnter amount of adult tickets:");
    scanf("%d", &TktAdult);
    while (TktAdult<0){
        printf("\nPlease enter a positive number!");
        printf("\nEnter amount of adult tickets:");
        scanf("%d", &TktAdult);
    }
Run Code Online (Sandbox Code Playgroud)

现在它只能阻止用户输入负值,但是如何添加它以便它也阻止用户输入char?

chu*_*ica 5

...阻止用户输入负值...

不可能.用户输入各种乱码.相反,读取一行用户输入并解析它的正确性.使用fgets()输入,然后 sscanf(),strtol()等解析.

// return -1 on EOF
int GetPositiveNumber(const char *prompt, const char *reprompt) {
  char buf[100];
  fputs(prompt, stdout);
  fflush(stdout);
  while (fgets(buf, sizeof buf, stdin)) [
    int value;
    if (sscanf(buf, "%d", &value) == 1 && value > 0) {
      return value;
    }
    fputs(reprompt, stdout);
    fflush(stdout);
  }
  return -1;
}

// Usage
int TktAdult = GetPositiveNumber(
    "\nEnter amount of adult tickets:" , 
    "\nPlease enter a positive number!");
if (TktAdult < 0) Handle_End_of_File();
else Success(TktAdult);
Run Code Online (Sandbox Code Playgroud)