这是我的代码
int a;
char array[10];
printf("Enter a number \n");
scanf("%d", &a);
array[1] = a;
printf("array = %d\n",array[1]);
问题是如果我输入一个大于 4 的数字,例如 12345,那么它将打印其他内容而不是 12345
一些帮助我
你有 char 类型的数组。char 的大小为 1 个字节,因此它适合从 -128 到 127 的值。任何更大的值都会溢出。如果您想存储更大的值,请使用不同的类型 - short、int,如果需要,甚至可以使用 long long。
我认为你错过了几件事。
首先:数组从索引 [0] 开始——是否有任何理由从索引 1 开始?
其次,正如其他人指出的那样,数组char
(即-128 和127 之间的数字)不会存储该范围之外的数字。
第三,我认为您想要的是将二进制数转换a
为字符串array
。为此,您需要使用sprintf()
(在 C 的情况下,或itoa
在 C++ 的情况下):
#include<stdio.h>
int main() {
int a;
char array[10];
printf("Enter a number \n");
scanf("%d", &a);
sprintf(array,"%d",a);
printf("array = %s\n",array);
}
为什么要将 int 存储到 char 数组中.. 的大值a
会溢出..
如果您在代码中解释您要尝试做什么,我们可以为您提供更多帮助.. 因为我看不出有任何理由让您将 an 存储int
到char
数组中
你有几个错误:
所以如果你想打印你输入的内容,试试这个:
printf("a = %d\n", a);
但是,如果你真的想开始将东西放入数组中,让我们谈谈一些事情......
首先,数组是 0 索引的,所以array[1] = a
你会做 `array[0] = a'而不是
其次,这是将一个int
(很可能是 32 位)转换为char
(很可能是 8 位)。所以你可以拥有的最大数量是255
(实际上这可能会有点混乱......标准没有指定char
是signed
或unsigned
。因此,最大值实际上可能是127
!)。
如果你解释你的最终目标是什么,我可以进一步扩展。
嗯,这段代码在很多层面上似乎都是错误的。
您正在将数字扫描为字符串,然后将其分配给整数而不使用stoi()
. 因此,唯一相同的 b/warray[1]
和您扫描的数字a
将是它们的二进制表示在某种程度上匹配(最多 1 个字节)。
如果您要扫描 10 位数字,只需使用:
long long int a;
scanf("%10lld", &a);