【问题标题】:What is the easiest way to get an int in a console app?在控制台应用程序中获取 int 的最简单方法是什么?
【发布时间】:2010-10-26 07:15:56
【问题描述】:

我想将用户输入作为整数处理,但似乎 C 无法从标准输入获取 int。有这样做的功能吗?我将如何从用户那里获取 int?

【问题讨论】:

    标签: c console user-input


    【解决方案1】:
    #include <stdio.h>
    
    int n;
    scanf ("%d",&n);
    

    http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

    【讨论】:

      【解决方案2】:
      #include <stdio.h>
      
      main() {
      
          int i = 0;
          int k,j=10;
      
          i=scanf("%d%d%d",&j,&k,&i);
          printf("total values inputted %d\n",i);
          printf("The input values %d %d\n",j,k);
      
      }
      

      来自here

      【讨论】:

      • 这看起来很可疑,它既将scanf()的结果存储在i中,同时又将一个值读入i中。不推荐。
      【解决方案3】:

      标准库函数 scanf 用于格式化输入: %d int (d 是小数的缩写)

      #include <stdio.h>
      int main(void)
      {
        int number;
        printf("Enter a number from 1 to 1000: ");
      
        scanf("%d",&number); 
        printf("Your number is %d\n",number);
        return 0;
      } 
      

      【讨论】:

        【解决方案4】:

        scanf() 是答案,但您当然应该检查返回值,因为从外部输入解析数字时很多很多事情都可能出错...

        int num, nitems;
        
        nitems = scanf("%d", &num);
        if (nitems == EOF) {
            /* Handle EOF/Failure */
        } else if (nitems == 0) {
            /* Handle no match */
        } else {
            printf("Got %d\n", num);
        }
        

        【讨论】:

        • 我的数字有时会变成负数或随机数,这是为什么呢?这是如果我的整数很大,仍然在 32 个字符以内但仍然很大
        • 一个整数通常有 2 个字节长。最左边的位用于存储数字的符号(0 表示正数,1 表示负数),因此我们剩下 15 位用于存储数字本身。因此,C 中的整数范围可以从 -32768(-2^15 或 1111111111111111)到 32768(2^15 或 0111111111111111)。当您输入一个大于最大可能值的数字时,最左边的位会被分配一个值,并且该整数不再代表您希望的值。如果您想输入更大的整数,请使用 long int 甚至 'long long int',因为它可以容纳更大的数字。
        【解决方案5】:

        除了(f)scanf(其他答案已充分讨论)之外,还有atoistrtol,适用于您已经将输入读入字符串但想要将其转换为@987654324 的情况@ 或long

        char *line;
        scanf("%s", line);
        
        int i = atoi(line);  /* Array of chars TO Integer */
        
        long l = strtol(line, NULL, 10);  /* STRing (base 10) TO Long */
                                          /* base can be between 2 and 36 inclusive */
        

        推荐strtol,因为它可以让你确定一个数字是否被成功读取(而不是atoi,它没有办法报告任何错误,如果它给出垃圾只会返回0)。

        char *strs[] = {"not a number", "10 and stuff", "42"};
        int i;
        for (i = 0; i < sizeof(strs) / sizeof(*strs); i++) {
            char *end;
            long l = strtol(strs[i], &end, 10);
            if (end == line)
                printf("wasn't a number\n");
            else if (end[0] != '\0')
                printf("trailing characters after number %l: %s\n", l, end);
            else
                printf("happy, exact parse of %l\n", l);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-03
          • 2011-01-21
          • 2023-03-08
          • 2021-12-12
          • 2018-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多