读取整数数组并将其打印出来

时间:2010-12-27 07:01:59

标签: c

我正在自己学习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();

}

3 个答案:

答案 0 :(得分:2)

这是因为无论何时给出0输入,您都打印了所有5个数字:

for (int i =0; i < arraylength; i++ )

要解决此问题,您可以通过运行从00的循环来打印输入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。