2013-02-15 112 views
0

我對c編程還很陌生,也是這個論壇,但我想我會試試看。我想要做的是讓用戶輸入一個4位數字。從那裏我想把這個數字存儲在一個數組中,所以我可以在需要時調用arr [2]等等。預先感謝任何幫助!將int變量從用戶存儲到C中的數組中

我真的很想知道這裏發生了什麼。再次感謝

+0

你正在解析出一個'int'值..'2345'。如果你想要單個數字,你需要從一個行緩衝區(或者'fgetc()')中一次把它們拖到一個字符處,並將* single *字符轉換爲int,然後將每個字符存儲到目標數組中。轉換之前,您可能需要驗證每個字符,實際上是一個數字字符。最後,請返回蒸氣形式'int main()'之外的東西。你宣佈它是正確的。成功返回'EXIT_SUCCESS',否則返回'EXIT_FAILURE'。 – WhozCraig 2013-02-15 04:42:53

回答

1

你的代碼不會做你認爲它的作用。 scanf從控制檯讀取一行。 %d號碼(即123)匹配,而不是號碼(即1,2,3)。您在循環中呼叫printf,而不是scanf(即您捕獲一個號碼並多次打印它)。

實際上,我發現它不止於此 - 你假定在C++中使用integer表示數字。您的4個整數數組不包含4位數 - 它包含四個獨立的整數,每個整數可以(通常)從-2147483648到+2147483648。

事情是,將數字分成數字並不容易 - 因爲「數字」是基數10(十進制),而計算機認爲是基數2(二進制)。相反,我們可以做的是讀取和寫入文本的數字和數字。讀取整數作爲字符串,並將每個數字寫爲字符:

#include <stdio.h> 

int main() 
{ 
    char input[4]; 

    //get input as text, instead of as a number 
    printf ("Please enter a 4 digit number: "); 
    scanf ("%s", input); 

    for (int i = 0; i < 4; i++) 
    { 
     //print as char instead of as number 
     printf ("%c\n", input[i]); 
    } 
} 

此代碼並不完美。如果用戶輸入「blah」,它將打印「b」「l」「a」「h」而不是抱怨非數字輸入。如果用戶輸入的字符超過4個,我們的字符數組將溢出,導致嚴重的安全風險和崩潰。

0

您已經詢問scanf讀取整數值。您可能想要讀取一個字符串。

在緊要關頭,你可以使用fgets

char number[5]; 
if(fgets(number, sizeof(number), stdin) != NULL) 
{ 
    for(i = 0; i < 4; i++) { 
     printf("%c\n", number[i]); 
    } 
} 
1

存在許多可能性,以實現你想要的行爲。下面是做這件事的一種方法:

int arr[4]; 
int i; 
char var1[4]; 

printf("Please enter a 4 digit number: "); 
scanf("%s", var1); 

for (i = 0; i < 4; i++) { 
    arr [i] = var1[i] - '0'; // convert char to int 
    printf("%d", arr[i]); 
} 
printf("\n"); 
+0

謝謝!這正是我所期待的! – Corey123456 2013-02-15 04:58:32

0

VAR1是一個整數,並且您將其存儲在整數數組ARR的每一個元素,因此輸出

如果你想給每個號碼存儲爲一個字符,使用fgets,或者如果你想存儲一個數字,可以做

i=0; 
while(var1){ 
    arr[len-i-1] = var1%10; //len is 4 in your case 
    var1 /= 10; 
    i--; 
}