如何使用数字和单词的条件

时间:2017-10-19 23:30:36

标签: c

我一直在尝试制作这个简单的程序,基本上是一个小小的对话。我遇到的最大问题是,每当我想要询问年龄时,如果有人错误地回答了一些不是数字,而是一个短语或一个单词的东西,而不是它不可能只是假设一个值。我可以写什么,以便如果有人对不是数字的东西进行了权利,它只会重复循环?

    main (){
        printf("Can you tell me your age\n");
        scanf("%d",&age );
        do{
          if ( age < 16) {
            printf("You're a child!\n");
          }
          else if ( age == 17){
            printf("Me too, cool! Let's meet.\n");
          }
          else {
            printf("Pretty old! You are dying.\n");
          }
        } while ((age<=0) && (age>130));
    }

3 个答案:

答案 0 :(得分:0)

要检查字符是否代表数字,您可以使用标准函数isdigit()。 但在scanf()的情况下,您只需检查其返回值即可。 你可能想要&#34;清理stdin&#34;如果你不知道用户会输入什么。

void    clean_stdin(void)
{
    int     c = 0;

    while (c != '\n' && c != EOF)
        c = getchar();
}

int     main(void)
{
    int     age;
    int     scanf_ret;

    do
    {
        printf("Can you tell me your age\n");
        scanf_ret = scanf("%d", &age);
        clean_stdin();

    } while (scanf_ret != 1);

    /*
        Now we know that age contains a valid number
    */

    return (0);
}

答案 1 :(得分:0)

成功时,scanf()返回成功填充的参数列表的项目数。我们只有一个参数,所以我们可以在while循环中使用这个返回值来连续检查它1(一个有效的输入):

#include <stdio.h>

int main() {

    int age, temp, status;

    printf("Can you tell me your age\n");

    status = scanf("%d", &age);

    while(status!=1) {
        while( (temp=getchar()) != EOF && temp != '\n' ) {};
        printf("Invalid input... please enter a number: ");
        status = scanf("%d", &age);
    }
    if ( age < 16) {
        printf("You're a child!\n");
    }
    else if ( age == 17) {
      printf("Me too, cool! Let's meet.\n");
    }
    else {
      printf("Pretty old! You are dying.\n");
    }
}

希望这有帮助。

答案 2 :(得分:-1)

您需要检查if语句中返回的scanf,您可以像这样修改代码:

 int main()
  {
    int age;  

    printf("Can you tell me your age\n");

    scan:
    if((scanf("%d",&age ))==1)
{
    do{
      if ( age < 16) {
        printf("You're a child!\n");
      }
      else if ( age == 17){
        printf("Me too, cool! Let's meet.\n");
      }
      else {
        printf("Pretty old! You are dying.\n");
      }
    } while ((age<=0) && (age>130));
}
    else
    {
        printf("Please enter a number\n");
        fflush(stdin);
        goto scan;
    }           
  return 0;
 }