我对 c 编程和这个论坛还很陌生,但我想我会试一试。我想要做的是让用户输入一个 4 位数字。从那里我想获取数字并将其存储在一个数组中,以便我可以在需要时调用 arr[2] 等等。提前感谢您的帮助!
我真的很想知道这里发生了什么。再次感谢
我对 c 编程和这个论坛还很陌生,但我想我会试一试。我想要做的是让用户输入一个 4 位数字。从那里我想获取数字并将其存储在一个数组中,以便我可以在需要时调用 arr[2] 等等。提前感谢您的帮助!
我真的很想知道这里发生了什么。再次感谢
您的代码没有按照您的想法执行。scanf
从控制台读取一行。%d
匹配数字(即 123),而不是数字(即 1、2、3)。您printf
循环调用,而不是scanf
(即您捕获一个数字并多次打印它)。
实际上,我认为它不止于此 - 您假设integer
C++ 中的意思是数字。您的 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 个字符,我们保存数字的字符数组将溢出,导致严重的安全风险和崩溃。
实现您想要的行为存在许多可能性。这是一种方法:
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");
var1 是一个整数,您将它存储在整数数组 arr 的每个元素中,因此输出
如果要将每个数字存储为字符,请使用 fgets,或者如果要将其存储为数字,请执行
i=0;
while(var1){
arr[len-i-1] = var1%10; //len is 4 in your case
var1 /= 10;
i--;
}
您已要求scanf
读取一个整数值。您可能想改为读取字符串。
在紧要关头,您可以使用fgets
:
char number[5];
if( fgets(number, sizeof(number), stdin) != NULL )
{
for( i = 0; i < 4; i++ ) {
printf( "%c\n", number[i] );
}
}