1

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

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

4

4 回答 4

1

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

实际上,我认为它不止于此 - 您假设integerC++ 中的意思是数字。您的 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 个字符,我们保存数字的字符数组将溢出,导致严重的安全风险和崩溃。

于 2013-02-15T04:42:52.190 回答
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");
于 2013-02-15T04:47:19.743 回答
1

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

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

i=0;
while(var1){
     arr[len-i-1] = var1%10; //len is 4 in your case
     var1 /= 10;
     i--;
}
于 2013-02-15T05:13:41.740 回答
0

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

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

char number[5];
if( fgets(number, sizeof(number), stdin) != NULL )
{
    for( i = 0; i < 4; i++ ) {
        printf( "%c\n", number[i] );
    }
}
于 2013-02-15T04:43:49.843 回答