2010-12-27 27 views
2

私は自分で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(); 

} 

答えて

2

これは0入力はすべて5番号を印刷する与えられたときのために関係なく起こります:

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

この問題を解決するには、あなたがで0に入る前に入った唯一の番号(複数可)ユーザーを印刷することができますi0からループを実行している:

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

これらの2つの数値は、あなたの配列の最後の2つの部分のメモリ位置に残ったゴミ。 3つの数字だけを入力したときにそれらを初期化することはありません。そのため、配列内の5つの要素すべてを調べて印刷すると、メモリ内のすべてのゴミが印刷されます。

1

arraylength = 5のサイズの配列にすべての整数を出力します。出力に5つの整数が得られます。配列を初期化しなかったので、配列の4番目と5番目の要素としてuninitilized値を取得します。 memset(&input, 0, arraylength*sizeof(int));を使用して、配列の初期値を0に設定できます。

関連する問題