开发者

Reading an array of integers and printing them out

I'm learning C on my own and doing a few exercises.

The following code reads in an array of integers from the user. The integers are printed out when the user types in a "0" or when the array is filled. Now the problem is the output.

When I type in "0" after I have typed in 3 digits e.g. 1 2 3 the output is the following: 1 2 3 -858993460 -858993460. I am not sure why I get the value "-858993460" but I have already found a solution to avoid it. Now my question is what the values mean and if there is a smarter solution than mine which is presented below as comments.

#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)
  开发者_如何学JAVA      {
            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();

}


This happens because irrespective of when the 0 input is given you print all 5 numbers:

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

To fix this you can print only the number(s) user entered before entering a 0 by running a loop from 0 to i:

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


Those 2 numbers are the garbage that was left in the memory locations for the last 2 parts of your array. You never initialise those when you only input 3 numbers, so when you go through and print all 5 elements in the array, it prints whatever garbage was in the memory.


You print all integers in array which is size of arraylength = 5. So you get 5 integers in output. As you didn't initialize array, you get uninitilized values as 4th and 5th elements of array. You can use memset(&input, 0, arraylength*sizeof(int)); to set initials values in array to 0.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜