【问题标题】:Separating numbers in an input in C [closed]在C中的输入中分离数字[关闭]
【发布时间】:2012-01-14 20:50:58
【问题描述】:

我需要从 C 语言的标准输入中获取 4 位输入,例如 1234,并分别存储数字,例如 1、2、3、4。我该怎么做?

【问题讨论】:

  • 定义“输入”。从命令行?从标准输入?从一个整数?来自 char[]?
  • 此输入是否存储为例如int,还是作为字符串(char 的数组)?
  • 标准输入。尝试使用 char 数组,但它只是将整数存储在第一个位置,其余的存储为 0

标签: c input


【解决方案1】:

将其作为字符串读取 (char*)。伪代码

char str[MaxLen];
Input str;
possibly do some checking that the input string is in required format.
int a0 = str[0] - '0';
int a1 = str[1] - '0';
etc.

【讨论】:

  • 你确定这是便携的吗?
  • 这不起作用,只是将 4 位数字作为 str[0]
  • @someguy:它有什么不便携的地方?
  • @KieranMilton:是的,它起作用了,只是你一定做错了什么。用你的实际代码编辑你的问题,我会指出你的错误
  • @Armen Tsirunyan:你假设'1'跟随'0','2'跟随'1'等等。
【解决方案2】:

你可以使用getchar:

int a[4],c,i;
for (i=0;i<4;i++) {
 while (!isdigit(c=getchar()));
 a[i]=c-'0';
}

【讨论】:

    【解决方案3】:

    你可以用这个:

    int no, i=0, a[4];
    scanf("%d", &no);
    while(i<4)
    {
      a[i]=no%10;
      no /= 10;
      i++;
    }
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      void separate_digits(int four_digits, int *outarray)
      {
          for (int i = 0; i < 4; ++i) {
              outarray[i] = four_digits % 10;
              four_digits = four_digits / 10;
          }
      }
      

      确保 outarray 足够大!

      【讨论】:

      • 哦,刚刚注意到输入是指来自标准输入的输入......然后用处不大。
      【解决方案5】:

      试试这个代码:

      char input[100];
      // we know that every digit is less than 10, so a full int isn't necessary
      int8_t output[100];
      
      // set all values to -1
      memset(output, -1, sizeof(output));
      
      scanf("%99s", &input);
      
      int len = (int) strlen(input);
      
      for (int i = 0; i < len; i++) {
          // assuming input is in ASCII
          output[i] = input[i] - '0';
      }
      
      for (int i = 0; i < 100; i++) {
          if (output[i] == -1)
          {
              break;
          }
      
          printf("%i, ", output[i]);
      }
      

      这需要输入最多 100 个字符,并输出每个字符的单独数字。

      【讨论】:

      • -1 表示由于不安全地使用 scanf 导致缓冲区溢出。
      • @JohnZwinck 嗯,什么?除非用户输入超过 100 个字符,否则我看不出有什么问题...
      • OP 明确指出它是为 4 个字符设计的,这只是稍微扩展了该功能。
      • 是的。正是这种思维导致了几十年来一个又一个安全问题。可悲的现实是人们复制粘贴那里的任何代码,所以我们不应该不必要地编写易受攻击的代码。 gets() 在 C 中已被正式弃用; scanf() 也好不到哪里去。
      • 把你的scanf改成scanf("%99s", &amp;input);就可以了。
      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2014-10-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多