2010-12-27 5 views
2

Я изучаю 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(); 

} 

ответ

2

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

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

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

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

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

1

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