Чтение массива целых чисел и распечатка их - PullRequest
2 голосов
/ 27 декабря 2010

Я изучаю C самостоятельно и делаю несколько упражнений.Следующий код читает массив целых чисел от пользователя.Целые числа распечатываются, когда пользователь вводит «0» или когда массив заполнен.Теперь проблема в выходе.Когда я набираю «0» после того, как я набрал 3 цифры, например, 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 ]

2 голосов
/ 27 декабря 2010

Это происходит потому, что независимо от того, когда введен ввод 0, вы печатаете все 5 числа:

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

Чтобы исправить это, вы можете напечатать только те числа, которые были введены пользователем перед вводом0 запустив цикл от 0 до i:

for (int j =0; j < i; j++ )
1 голос
/ 27 декабря 2010

Вы печатаете все целые числа в массиве с размером arraylength = 5. Таким образом, вы получаете 5 целых чисел в выводе.Поскольку вы не инициализировали массив, вы получите неинициализированные значения как 4-й и 5-й элементы массива.Вы можете использовать memset(&input, 0, arraylength*sizeof(int)); для установки начальных значений в массиве на 0.

1 голос
/ 27 декабря 2010

Эти 2 числа являются мусором, оставленным в ячейках памяти для последних 2 частей вашего массива. Вы никогда не инициализируете их, когда вводите только 3 числа, поэтому, когда вы просматриваете и распечатываете все 5 элементов в массиве, он печатает любой мусор в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...