2010-12-27 19 views
2

Ich lerne C alleine und mache ein paar Übungen.
Der folgende Code liest ein Array von Ganzzahlen vom Benutzer ein. Die Ganzzahlen werden ausgedruckt, wenn der Benutzer eine "0" eingibt oder wenn das Array gefüllt ist. Jetzt ist das Problem die Ausgabe.
Wenn ich "0" eintippe, nachdem ich 3 Ziffern eingegeben habe, z. 1 2 3 der Ausgang ist der folgende: 1 2 3 -858993460 -858993460. Ich bin nicht sicher, warum ich den Wert "-858993460" bekomme, aber ich habe bereits eine Lösung gefunden, um es zu vermeiden. Jetzt ist meine Frage, was die Werte bedeuten und ob es eine klügere Lösung als meine gibt, die unten als Kommentare präsentiert wird.Ein Array von ganzen Zahlen lesen und ausdrucken

#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(); 

} 

Antwort

2

Dies geschieht, weil unabhängig davon, wann der 0 Eingang Sie alle 5 Zahlen drucken gegeben:

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

Um dies zu beheben, können Sie nur die Nummer (n) Benutzer eingegeben drucken, bevor ein 0 Eingabe eine Schleife von 0 zu i ausgeführt wird:

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

2 Diese Zahlen sind die Müll, der in den Speicherstellen für die letzten 2 Teile Ihres Arrays übrig geblieben war. Sie initialisieren diese nie, wenn Sie nur 3 Zahlen eingeben. Wenn Sie also alle 5 Elemente im Array durchlaufen und drucken, wird der Müll im Speicher ausgedruckt.

1

Sie drucken alle Ganzzahlen in Array, die Größe von arraylength = 5 ist. So erhalten Sie 5 ganze Zahlen in der Ausgabe. Da Sie das Array nicht initialisiert haben, erhalten Sie als 4. und 5. Element des Arrays nicht initialisierte Werte. Sie können memset(&input, 0, arraylength*sizeof(int)); verwenden, um Initialwerte im Array auf 0 zu setzen.

Verwandte Themen