【问题标题】:Using scanf to capture a string of integers into an array in C使用scanf将一串整数捕获到C中的数组中
【发布时间】:2026-01-16 05:55:01
【问题描述】:

我正在尝试使用 scanf 来捕获一串数字并将其转换为相应的数组。例如,用户输入 1234,然后输入,将设置以下内容:

array[0]=1
array[1]=2
array[2]=3
array[3]=4

到目前为止,这是我的代码:

    void user_input()
{
  int cardarray[16];
  int i;
  char number;
  printf("Enter in the number:");
  for (i=0; i<16; i++)
{
  scanf("%c", &number);
  number = cardarray[i] - '0';
    }


  printf("The number is %d\n", /*some value*/);
}

我知道您必须读取字符并将每个字符转换为整数,但我不确定如何。

【问题讨论】:

  • 您的代码似乎完成了您想要它做的事情。您确实读取了字符,并且确实将它们转换为整数。
  • 将数字的数字存储为单独的 chars 而不是使用 int%d 格式说明符是否有特定原因?
  • 总是检查scanf的结果,否则你最终可能会处理不确定的数据。

标签: c arrays for-loop


【解决方案1】:

这里有一些代码可能会有所帮助:

#include <stdio.h>
int main(void)
{
    int i = 0;
    /* firstly, capture the input */
    scanf("%d", &i);

    /* secondly , extract for each number:
       1234 -> 4,3,2,1
    */
    int ia[256] = {0};
    int len = 0;
    while(i){
        ia[len++] = i%10;
        i /= 10;
    }

     /* thirdly, reverse the array */
     int j = 0;
     while(j < len-j-1){
         int t = ia[j];
         ia[j] = ia[len-j-1];
         ia[len-j-1] = t;
         j++;
     }

     /*let's see if it works */
     for (j=0; j < len; j++){
        printf("%d ", ia[j]);
        }
     putchar('\n');

     return 0;
}

【讨论】:

    【解决方案2】:

    我猜你想要:

    printf("The number is %d\n",
       cardarray[0]*1000 + cardarray[1]*100 + cardarray[2]*10 + carrarray[3]);
    

    你也可以使用:

    printf("The number is %d%d%d%d\n",
        cardarray[0], cardarray[1], cardarray[2], cardarray[3]);
    

    【讨论】:

    • 我很抱歉不清楚。我想将数字扫描到一个数组中,然后使用 printf 使用从该数组填充的值再次按顺序显示数字。
    【解决方案3】:

    您正在寻找atoi()

    cardarray[i] = aoti(number);
    

    http://www.codingunit.com/c-reference-stdlib-h-function-atoi-convert-a-string-to-an-integer

    话虽如此,如果您分配给正确的变量,您使用的方法是减去字符 0 的字符集值也可以正常工作:

    cardarray[i] = number - '0';
    

    【讨论】:

    • atoi 还不错,但 strtol 更有用,尤其是在您不确定输入包含什么时。
    【解决方案4】:

    应该行

    number = cardarray[i] - '0'; 
    

    阅读

    cardarray[i] = number - '0'; 
    

    然后按照大卫所说的计算答案

    【讨论】:

      最近更新 更多