我对c编程很新,还有这个论坛,但我想我会尝试一下。我想要做的是让用户输入一个4位数字。从那里我想取数字并将其存储在一个数组中,因此我可以在需要时调用arr [2]等等。在此先感谢您的帮助!
我真的很想知道这里发生了什么。再次感谢
答案 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] );
}
}