2016-04-06 3 views
0

Ich bin neu in der Community und auch zu codieren. Im Moment nehme ich Intro zur Informatik an meinem CC und wir lernen C++. Wie auch immer, ich muss ein Programm erstellen, das den Benutzer nach einer Nummer fragt, die der Größenindikator des Arrays new_array sein wird. Das Programm fordert den Benutzer dann auf, die Zahlen nacheinander einzugeben und anschließend umgekehrt auszugeben. #include using Namensraum std;C++: Verwenden von for-Schleife, um Benutzereingabe von Zahlen in Array zu ermöglichen

int main() 
{ 
cout << "How many numbers?\n"; 
int numbers; // holds amount of numbers to be entered into array 
cin >> numbers; 
int new_array[numbers]; 
for(int counter = 0; counter < numbers; counter++) 
{ 
    cout << "Enter number " << counter << endl; 
    cin >> new_array[counter]; 
} 

cout << "You entered: " << endl; 

for(int i = numbers; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 

} 

return 0; 
} 

Ich verstehe, wie dies zu tun und zum größten Teil, mein Programm funktioniert. Es gibt die Zahlen, die rückwärts eingegeben werden, gut aus, aber bevor es dies tut, gibt es große, seltsame Zahlen aus. Wenn der Benutzer z. B. 5 als Anzahl der einzugebenden Zahlen eingibt und dann 1, 2, 3, 4 und 6 als 5 Nummern eingibt, gibt das Programm zuerst die Nummer 4669476 aus und gibt dann die Zahlen im Array rückwärts aus. Kann mir jemand erklären, was ich falsch gemacht habe und wie ich das beheben könnte? Danke im Voraus! PS sei sanft! Ich bin ein Neuling in diesem

Antwort

1

Diese Schleife liest außerhalb der Grenzen:

for(int i = numbers; i >= 0 ; i--) 
{ 

Wenn Sie i durch in Ihrem Kopf folgen Sie, dass Sie die Ausgabe Einträge numbers bis zu 0, wenn in der Tat sehen sollten Sie Ausgangs Einträge numbers-1 bis zu 0.

Ein alternatives Muster ist:

for(int i = numbers; i--;) 

Oder Sie die sagenumwobene --> operator verwenden können.

Es wäre möglich, "einfach" von numbers - 1 zu starten, jedoch würde das von Ihnen verwendete Schleifenmuster für einen Zähler ohne Vorzeichen nicht funktionieren (weil sie immer >= 0 sind). IMHO ist es eine gute Idee, ein Muster zu verwenden, das für alle Arten funktioniert; Dann ist es weniger wahrscheinlich, dass Sie in Zukunft einen Fehler machen.

0

In Ihrem Display for loop, Sie begannen von i = numbers, die außerhalb der Array-Bereich ist. Da das Array von 0 till size - 1 startet, müssen Sie von i = numbers - 1 bis hin zu >=0 starten.

0

Da Sie von array[numbers] starten, die nicht definiert ist.

array[0], array[1], ... array[numbers-1] sind definiert.

0

In C-Arrays sind von 0 statt 1 So ist die letzte Zahl ist in array[4]

Also, wenn Sie es gerade schreiben gespeichert gespeichert sind, sollten Sie eine numbers - 1 statt nur numbers starten.

0

Da Sie den Index außerhalb des Bereichs starten, erhalten Sie einen ungültigen Wert.

Ihr Code sollte etwas, was so aussehen

for(int i = numbers-1; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 
    } 
Verwandte Themen