将用户的int变量存储到C中的数组中

时间:2013-02-15 04:39:46

标签: c arrays user-input

我对c编程很新,还有这个论坛,但我想我会尝试一下。我想要做的是让用户输入一个4位数字。从那里我想取数字并将其存储在一个数组中,因此我可以在需要时调用arr [2]等等。在此先感谢您的帮助!

我真的很想知道这里发生了什么。再次感谢

4 个答案:

答案 0 :(得分:1)

您的代码没有按照您的想法执行。 scanf从控制台读取一行。 %d匹配数字(即123),而不是数字(即1,2,3)。您在循环中调用printf,而不是scanf(即您捕获一个数字并多次打印)。

实际上,我发现它不止于此 - 您假设C ++中的integer表示数字。您的4个整数数组不包含4位数字 - 它包含4个单独的整数,每个整数可以(通常)从-2147483648到+2147483648。

问题是,将数字分成数字并不容易 - 因为“数字”是基数10(十进制),而计算机则认为是基数2(二进制)。我们可以做的是读取并将数字和数字写为 text 。将整数作为字符串读取,并将每个数字写为字符:

#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个,则保留该数字的字符数组将溢出,从而导致严重的安全风险和崩溃。

答案 1 :(得分: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");

答案 2 :(得分:1)

var1是一个整数,你将它存储在整数数组arr的每个元素中,因此输出

如果您想将每个号码存储为字符,请使用fgets,或者如果您想将其存储为数字,请执行

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

答案 3 :(得分:0)

您已要求scanf读取整数值。您可能想要读取字符串。

在紧要关头,您可以使用fgets

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