2013-12-10 54 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