我正在自己学习C并做一些练习。
以下代码读入
来自用户的整数数组。当用户键入“0”或填充数组时,将打印出整数。现在的问题是输出。
当我键入3个数字后输入“0”,例如1 2 3输出如下:1 2 3 -858993460 -858993460。我不知道为什么我得到值“-858993460”,但我已经找到了避免它的解决方案。现在我的问题是价值意味着什么,以及是否有比我更聪明的解决方案,下面将作为评论。
#include <stdio.h>
#include <string.h>
#define arraylength 5
int main ()
{
//const int arraylength = 21; //alternative possibility to declare a constant
int input [arraylength] ;
int temp = 0;
//int imax = 0;
printf("Please type in a your digits: ");
for (int i = 0; i < arraylength; i++)
{
scanf("%d", &temp);
if ( temp !=0)
{
input[i]= temp;
//imax= i;
}
else
{
//imax= i;
break;
}
if (i < arraylength-1)
printf("Next: ");
}
for (int i =0; i < arraylength; i++ ) // switch arraylength with imax
{
printf("%d", input[i]);
}
getchar();
getchar();
getchar();
}
答案 0 :(得分:2)
这是因为无论何时给出0
输入,您都打印了所有5
个数字:
for (int i =0; i < arraylength; i++ )
要解决此问题,您可以通过运行从0
到0
的循环来打印输入i
之前输入的用户数:
for (int j =0; j < i; j++ )
答案 1 :(得分:1)
这两个数字是数组最后两部分留在内存位置的垃圾。当你只输入3个数字时,你永远不会初始化那些,所以当你通过并打印数组中的所有5个元素时,它会打印出内存中的垃圾。
答案 2 :(得分:1)
在数组中打印所有整数,其大小为arraylength = 5.因此输出中得到5个整数。由于没有初始化数组,因此将未经过类型化的值作为数组的第4和第5个元素。您可以使用memset(&input, 0, arraylength*sizeof(int));
将数组中的首字母值设置为0。