2013-12-10 29 views
3

假设n个空间是为无给出的条件,这些数字是受试者的条件是它们位于任何空格在一行输入1和扫描n个数没有用C

说,n是10之间。 6,然后让输入像“239435” 然后如果我具有其中我存储这些号码随后的阵列我应该得到

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

我可以通过使用array[0]=(input/10^n)得到上面的结果,然后下一个数字 但有没有更简单的方法来做到这一点?

+0

请告诉我们你尝试过什么? –

+2

如果您希望数字的范围是[[0,9]],那么您可以使用[scanf']的宽度说明符(https://www.google.com/search?q=scanf+width+specifier)。然而,你正在处理'[1,10]'.. – starrify

+0

@starrify:'array [0] =(input/10^n)'这让我相信输入将在范围内[[0,9 ]'。 –

回答

2

只是减去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'; 

更新

假设0不是1-10之间的有效的输入和只允许数字:

char *s = "239435" 
int l = strlen(s); 
int *array = malloc(sizeof(int)*l); 
int i = 0; 
while(*s != 0) 
{ 
     if(!isdigit(*s)) 
     { 
      // error, the user entered something else 
     } 

     int v = array[i] = *s -'0'; 

     // If the digit is '0' it should have been '10' and the previous number 
     // has to be adjusted, as it would be '1'. The '0' characater is skipped. 
     if(v == 0) 
     { 
      if(i == 0) 
      { 
       // Error, first digit was '0' 
      } 


      // Check if an input was something like '23407' 
      if(array[i-1] != 1) 
      { 
       // Error, invalid number 
      } 
      array[i-1] = 10; 
     } 
     else 
      array[i] = v; 

    s++; 
} 
+1

或更好的可读性和可理解性使用'array [i] = s [i] - '0';' –

+0

你说得对,我解决了这个问题。 :) – Devolus

+0

这不会在C中工作。您不能在语句中声明变量。 – codewarrior

2

您可以使用一个字符串来接受输入,然后检查每个位置并将它们提取并存储在一个数组中。您需要明确检查每个位置的数值,因为您接受输入为字符串。对于以字符串形式输入的整数,没有保证输入是纯数字的,如果不是这样,事情可能会变得疯狂。

检查这个代码

#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; 
} 
2

例如

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 
+0

感谢这个信息先生。真的很有帮助。一个简单的问题,给scanf()的计数提供一些提示是否更好?恕我直言,对于这个代码,在第六个之后输入的任何数字都将被默默地放弃。 。 。 –

+0

+1,并再次感谢...... :-) –

+0

@SouravGhosh这只是一个简单的例子。这当然是一个好主意。 – BLUEPIXY