【问题标题】:How do you print different things depending the user input?你如何根据用户输入打印不同的东西?
【发布时间】:2018-04-13 01:51:48
【问题描述】:

首先,如果这个问题没有意义,我深表歉意,因为我的英语不是那么好......

我的问题是,我们如何根据用户输入打印出不同的内容? 我要做的是:当用户输入整数时,程序会打印出输入的数字。当用户输入非整数的内容(如符号和字符)时,程序会打印出“非整数”。

我目前的想法(伪代码)如下:

`int main(){
    int value;
    printf("Enter numbers");
    scanf("%d", &value);
    if(value is integer){
        printf("%d", value);
    } else {
        printf("not integer");
    } 
    return 0;
}`

让我着迷的是scanf;通过使用 %d,我假设用户将输入一个整数值,但用户可以输入不是整数的值,因此我无法使用 if 语句 if( value is integer) 进行比较。如何进行比较以确定输入的值是否为整数?

【问题讨论】:

  • 通过使用 %d,我假设用户将输入一个整数值,但用户可以输入非整数值它不会正确扫描例如scanf("%d",&value) 和给定11.5 一个浮点值scanf() 将不会在此处正确扫描,稍后您将如何检查它被截断。
  • 没错,scanf("%d") 基本上不是假设用户将输入十进制值(以 10 为底)吗?到目前为止,我主要关心的是知道如何根据用户输入打印不同的东西,让它是整数,或者其他东西,比如字符/符号/等等。
  • 一种可能的方法是将输入扫描为string,然后对字符串进行操作并检查它是否包含任何dot(.)。可以使用atoi()atof()
  • 在调用任何scanf() 系列函数时,始终检查返回值(而不是参数值)以确保操作成功。因此,如果用户输入“aboce”,则返回值为 0(并且“aboce”仍将在 I/O 流中stdin)您可以轻松地使用返回值的检查来确定of '用户是否输入了整数
  • @user3629249 我不确定检查返回值是否意味着:if(scanf("%d",&value)==1) 但这有效,谢谢您的帮助

标签: c scanf


【解决方案1】:

我不知道这是不是一件好事。

您可以使用 ASCII 来检查输入类型是否为整数 (ASCII 中介于 48 - 57 之间)

会是这样的

char value;
int flag = 0; //to check true or false (0 means false, and 1 means true)
printf("Enter numbers");
scanf("%c", &value);
for(int i = 48; i <= 57; i++){
    if(value == i){
        flag = 1;
        break;
    }
}
if(flag == 1){
    printf("%c", value);
} else {
    printf("not integer");
}

【讨论】:

  • 这似乎也是我想要的,谢谢!
【解决方案2】:

如何根据用户输入打印不同的内容?

第 1 步:阅读用户输入的

char buf[100];
if (fget(buf, sizeof buf, stdin)) {
  // something was entered

第 2 步:测试字符串

  char *end;
  long value = strtol(buf, *end);
  // If the end is the same as the beginning, no conversion occurred.
  if (end == buf) {
    puts("not integer");
  }
    printf("%ld\n", value);
  }
}

其他代码可以查找出现在整数之后的输入。代码还可以测试是否有大量溢出long 范围。

【讨论】:

    【解决方案3】:

    代码如下。它满足不同的情况,例如输入负数和十进制数:

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int main() {
        char input[20];
        int wrongFlag = 0;
        scanf("%s", input);
        if (input[0] == '0' && strlen(input) > 1) {
            wrongFlag = 1;
            //for number starts with 0, and string length>1 eg: 010
        }
        for (int i = 0; i < strlen(input); i++) {
            if (i == 0 && (input[i] == '-' && strlen(input) > 2 && input[i + 1] == '0')) {
                //check first round only: negative number with length >2 and starts with 0 eg: -010.
                wrongFlag = 1;
                continue;
            }
            if (i != 0 && !isdigit(input[i])) {
                //check following rounds, check if it is not digit
                wrongFlag = 1;
                break;
            }
        }
        if (wrongFlag) {
            printf("Not integer");
        }
        else {
            printf("integer");
        }
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      试试这个对我有用。

      #include<stdio.h>
      #include<string.h>
      int main()
      {
          int i;
          char value[50];
          int len;
          printf("Enter maximum 50 digits\n");
          /* enter the values you wanted*/
          printf("Enter the value: ");
          gets(value);
          len = strlen(value);
          /*it will iterate upto the end of the user input*/
          for(i=0;i<len;i++)
          {
              if(48<value[i] && value[i]<=57)
              {
                  if(i==(len-1))
                      printf("It's an integer");          
              }
              else{
      
                  printf(" Not an integer");
                  break;
              }
          }
          return 0;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-20
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        相关资源
        最近更新 更多