在C中扫描n个不带空格的数字

在C中扫描n个不带空格的数字,c,scanf,C,Scanf,假设n个数字被输入到一行中,没有任何空格,条件是这些数字必须满足介于1和10之间的条件 假设n是6,然后让输入像“239435” 然后,如果我有一个数组,在其中存储这些数字,那么我应该 array[0]=2 array[1]=3 array[2]=9 array[3]=4 array[4]=3 我可以通过使用数组[0]=(输入/10^n)然后使用下一个数字来获得上述结果 但是有更简单的方法吗?您可以使用字符串获取输入,然后检查每个位置并将其提取并存储

假设n个数字被输入到一行中,没有任何空格,条件是这些数字必须满足介于1和10之间的条件

假设n是6,然后让输入像“239435” 然后,如果我有一个数组,在其中存储这些数字,那么我应该

    array[0]=2
    array[1]=3
    array[2]=9
    array[3]=4  
    array[4]=3
我可以通过使用
数组[0]=(输入/10^n)
然后使用下一个数字来获得上述结果
但是有更简单的方法吗?

您可以使用字符串获取输入,然后检查每个位置并将其提取并存储在数组中。您需要显式地检查每个位置中的数值,因为您正在接受作为字符串的输入。对于作为字符串输入的整数,不能保证输入是纯数字的,如果不是,事情可能会变得疯狂

检查此代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        char ipstring[64];
        int arr[64];
        int count, len = 0;
        printf("Enter the numbersi[not more than 64 numbers]\n");
        scanf("%s", ipstring);
        len = strlen(ipstring);
        for (count = 0; count < len ; count++)
        {
                if (('0'<= ipstring[count]) && (ipstring[count] <= '9'))
                {
                        arr[count] = ipstring[count] - '0';

                }
                else
                {
                        printf("Invalid input detectde in position %d of %s\n", count+1, ipstring );
                        exit(-1);
                }
        }
        //display
        for (count = 0; count < len ; count++)
        {
                printf("arr[%d] = %d\n", count, arr[count]);
        }
        return 0;
}
#包括
#包括
#包括
int main()
{
char-ipstring[64];
int-arr[64];
整数计数,len=0;
printf(“输入数字rsi[不超过64个数字]\n”);
scanf(“%s”,ipstring);
len=strlen(ipstring);
用于(计数=0;计数如果('0'只需减去每个数字的
0
的ASCII码,就可以得到它的值

 char *s =  "239435"
 int l = strlen(s);
 int *array = malloc(sizeof(int)*l);
 int i;
 for(i = 0; i < l; i++)
      array[i] = s[i]-'0';
例如

结果:

>239435
2,3,9,4,3,5

请告诉我们您尝试过什么?如果您想要的数字范围是
[0,9]
,那么您可以使用a。但是您正在处理
[1,10]
。@starrify:
array[0]=(input/10^n)
这让我相信输入将在
[0,9]
范围内(%1d%1d%1d%1d%1d),a,a+1,a+2,a+3,a+4,a+5)
@BLUEPIXY:你能把你的方法作为答案吗?这就是确切的答案。我今天学到了一些新东西,谢谢。或者更好的方法是使用
array[I]=s[I]-“0”;
这在C中不起作用。你不能在语句中声明变量。@Devolus…scanf()的用法在哪里?我的意思是,OP用scanf标记了帖子。所以,问。@SouravGhosh通过
scanf
读取字符串的结果是…一个字符串,又称为
char*
。那么为什么我需要显示明显的内容呢?海报是问如何将结果字符串转换为数组,而不是如何使用
scanf
,所以这是无关紧要的我们不需要提供完整的工作程序来让答案变得有用,只需要海报有问题的相关部分。至少,这是我的看法。所以“让我为你编码”也不是网站也不是101编程课程。@Devolus先生,请检查BLUEPIXY的答案,我想我的版本对你来说会很清楚。我不是说你错了,只是想专注于一个更好的方法。谢谢你提供的信息,先生。真的很有帮助。一个简单的问题,对scanf()的计数给出一些提示不是更好吗?IMHO,对于这个代码,在第六个数字之后输入的任何数字都会被无声地删除。所以…@SouravGhosh这只是一个简单的例子。当然,进行这样的检查是个好主意。
int a[6];
printf(">");
scanf("%1d%1d%1d%1d%1d%1d", a,a+1,a+2,a+3,a+4,a+5);
printf("%d,%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4],a[5]);
>239435
2,3,9,4,3,5