我對c編程還很陌生,也是這個論壇,但我想我會試試看。我想要做的是讓用戶輸入一個4位數字。從那裏我想把這個數字存儲在一個數組中,所以我可以在需要時調用arr [2]等等。預先感謝任何幫助!將int變量從用戶存儲到C中的數組中
我真的很想知道這裏發生了什麼。再次感謝
我對c編程還很陌生,也是這個論壇,但我想我會試試看。我想要做的是讓用戶輸入一個4位數字。從那裏我想把這個數字存儲在一個數組中,所以我可以在需要時調用arr [2]等等。預先感謝任何幫助!將int變量從用戶存儲到C中的數組中
我真的很想知道這裏發生了什麼。再次感謝
你的代碼不會做你認爲它的作用。 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個,我們的字符數組將溢出,導致嚴重的安全風險和崩潰。
您已經詢問scanf
讀取整數值。您可能想要讀取一個字符串。
在緊要關頭,你可以使用fgets
:
char number[5];
if(fgets(number, sizeof(number), stdin) != NULL)
{
for(i = 0; i < 4; i++) {
printf("%c\n", number[i]);
}
}
存在許多可能性,以實現你想要的行爲。下面是做這件事的一種方法:
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");
謝謝!這正是我所期待的! – Corey123456 2013-02-15 04:58:32
VAR1是一個整數,並且您將其存儲在整數數組ARR的每一個元素,因此輸出
如果你想給每個號碼存儲爲一個字符,使用fgets,或者如果你想存儲一個數字,可以做
i=0;
while(var1){
arr[len-i-1] = var1%10; //len is 4 in your case
var1 /= 10;
i--;
}
你正在解析出一個'int'值..'2345'。如果你想要單個數字,你需要從一個行緩衝區(或者'fgetc()')中一次把它們拖到一個字符處,並將* single *字符轉換爲int,然後將每個字符存儲到目標數組中。轉換之前,您可能需要驗證每個字符,實際上是一個數字字符。最後,請返回蒸氣形式'int main()'之外的東西。你宣佈它是正確的。成功返回'EXIT_SUCCESS',否則返回'EXIT_FAILURE'。 – WhozCraig 2013-02-15 04:42:53