How to stop user entering char as int input in C

前端 未结 5 1588
北恋
北恋 2020-12-20 06:17

Heres a part of my code:

    printf(\"\\nEnter amount of adult tickets:\");
    scanf(\"%d\", &TktAdult);
    while (TktAdult<0){
        printf(\"\\n         


        
5条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-20 06:52

    ... stop user from entering a negative value ...

    is not possible. Users enter all sorts of gibberish. Instead, read a line of user input and parse it for correctness. Use fgets() for input, then sscanf(), strtol(), etc. for parsing.

    // 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);
    

提交回复
热议问题