2010-12-27 7 views
2

나는 C를 배우면서 몇 가지 연습을하고 있습니다.
다음 코드는 정수 배열을 사용자로부터 읽습니다. 정수는 사용자가 "0"을 입력하거나 배열이 채워질 때 인쇄됩니다. 이제 문제는 결과입니다.
3 자리 숫자를 입력 한 후 "0"을 입력 할 때. 1 2 3 출력은 다음과 같습니다. 1 2 3 -858993460 -858993460. 내가 왜 "-858993460"값을 얻었는지 잘 모르겠다.하지만 나는 그것을 피하기위한 해결책을 이미 찾았다. 이제 내 질문은 가치가 의미하는 바이며, 내 의견보다 더 똑똑한 해결책이 있다면 의견으로 제시됩니다.정수 배열 읽기 및 인쇄하기

에 관계없이 0 입력이 주어 졌을 때의 모든 5 번호 인쇄 때문에이 문제가 발생
#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

:

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

이 경우에만 번호를 인쇄 할 수 있습니다 문제를 해결하려면 사용자에 의한 0를 입력하기 전에 입력을 i0에서 루프를 실행 :

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

사람들이 개 숫자는 있습니다 배열의 마지막 두 부분에 대한 메모리 위치에 남아있는 쓰레기. 3 개의 숫자 만 입력하면 초기화하지 않으므로 배열의 5 개 요소를 모두 인쇄하면 메모리에있는 모든 가비지가 인쇄됩니다.

1

모든 정수를 arraylength = 5 크기의 배열로 인쇄합니다. 출력에 5 개의 정수가 표시됩니다. 배열을 초기화하지 않았으므로 uninitilized 값을 배열의 4 번째 및 5 번째 요소로 가져옵니다. memset(&input, 0, arraylength*sizeof(int));을 사용하여 배열의 이니셜 값을 0으로 설정할 수 있습니다.