【问题标题】:Assigning each digit of an int to an int array将 int 的每个数字分配给 int 数组
【发布时间】:2010-05-26 20:02:24
【问题描述】:

是否可以使用 scanf 检索整数并将每个数字分配给 int 数组?

我正在尝试以这种方式实现它:

int numbers[];
puts("Enter number");
int x;
scanf("%d",x);
numbers = malloc(x);
numbers = x;

【问题讨论】:

  • 你是说你想把一个整数变成一个字符串?
  • 编译器需要专门捕捉人们将 int 传递给 scanf 而不是 int* 的情况,并输出“不。你不想那样做。不好”——似乎每次有人使用 scanf 所以他们犯了这个错误。它应该是 scanf("%d", &x); 或者你将尝试将一个 int 写入任何内存位置 x 碰巧持有

标签: c arrays scanf


【解决方案1】:

两个快速技巧:

整数转字符串:

int N;
char buf[10];
scanf("%d",&N);
sprintf(buf,"%d",N);

整数转数组:

int N,i,
    buf[10],
    Dig;
scanf("%d",&N);
Dig = log10(N);
for(i = Dig; N ; i--){
   buf[i] = N % 10;
   N /= 10;
}

【讨论】:

    【解决方案2】:

    您可以将其作为字符串 %s 读入 char 数组。

    此时,您将每个数字都放在一个字符中。

    char 只是一个 int 值。因此,您可以将之后的任何转换应用于您读入的字符。

    您可以将每个 char 数字转换为其 int 值,然后您可以遍历字符串中的每个 char 并执行以下操作:

    myInts[i] = charBuffer[i] - '0'; /* where i = 0.. string length -1 */
    

    【讨论】:

    • 我的猜测是 OP 的问题之一是确定要分配的内存量。
    【解决方案3】:

    不是那样神奇,您需要读取 int 并自己分解数字,或者将其作为字符串读取,以便您可以单独访问每个字符

    【讨论】:

      【解决方案4】:

      其他人对你想要什么都有很好的答案,只是想指出你的代码真正在做什么---

      numbers = malloc(x);
      

      在这里,您已经读取了用户的输入并在堆上分配了一个 x 字节数组。数字指向那段记忆。这是您到达该数组的唯一方法。

      numbers = x;
      

      那么你已经为整数 x 分配了数字。您现在已经忘记了 malloc 分配的内存,并且无法使用 free() 删除它。

      【讨论】:

        猜你喜欢
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 2013-10-15
        • 2011-09-03
        • 1970-01-01
        • 2019-10-07
        相关资源
        最近更新 更多