C程序阵列打印不正确的数据

时间:2013-10-30 11:44:48

标签: c arrays

这是我的代码

 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

有些人帮助我

5 个答案:

答案 0 :(得分:5)

你有char类型的数组。 char的大小是1个字节,因此它适合-128到127的值。任何更大的值都会溢出。如果你想存储更大的值,可以使用不同的类型 - short,int,如果需要也可以长。

答案 1 :(得分:1)

为什么要将int存储到char数组中.. a的大值将溢出..

如果您在代码中解释您要执行的操作,我们可以为您提供更多帮助..因为我认为您没有任何理由将int存储到char数组中

答案 2 :(得分:1)

我认为你错过了几件事。

首先:数组从索引[0]开始 - 有没有理由从索引1开始?

其次,正如其他人指出的那样,char数组(即-128到127之间的数字)不会存储该范围之外的数字。

第三,我认为你想要的是将二进制数a转换为字符串array。为此,您需要使用sprintf()(在C的情况下,或在C ++的情况下为itoa):

#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);
}

答案 3 :(得分:0)

您有一些错误:

因此,如果您要打印输入的内容,请尝试以下操作:

printf("a = %d\n", a);

但是,如果你真的想开始把东西放到数组中,那就谈谈几件事......

首先,数组是0索引的,所以不是array[1] = a,而是`array [0] = a'

其次,这是向int(最可能是8位)投射char(最有可能是32位)。因此,您可以拥有的最大金额为255(实际上这可能会有点混乱......标准没有说明charsigned还是unsigned因此,max可能实际上是127!)。

如果你解释一下你的最终目标是什么,我可以进一步扩展。

答案 4 :(得分:0)

嗯,这个代码在很多层面上看起来都是错误的。

您正在将数字扫描为字符串,然后在不使用stoi()的情况下将其分配给整数。所以唯一不同的是b / w array[1]和你扫描的数字,a将是他们的二进制表示在某种程度上匹配(最多1个字节)。

如果您正在扫描10位数字,只需使用:

long long int a;
scanf("%10lld", &a);