Warum geht mein Programm nicht?!

ternek57

ternek57

Mitglied
Thread Starter
Dabei seit
05.07.2007
Beiträge
808
Reaktionspunkte
47
Hallo Macuser,

mein Kumpel hat eine Programmübung in c++geschrieben, die 10 Zahlen einlesen und dann addieren soll. Das funktioniert aber nicht, das Ergebnis ist immer die doppelte Summe der Zahlen. Wenn man immer nur 1 eingibt, dann gibt das Programm als Summe 20 aus. Hier mal der Code:

#include<iostream>
using namespace std;



int main()
{


int zahl[9];
int summe=0;

cout << "Bitte geben Sie 10 Zahlen ein, von denen Sie die Summe berechnen möchten." << endl;

for(int i=0; i<=9; i++)
{
cout << i+1 << ". Zahl: ";
cin >> zahl;

}


for(int i=0; i<=9; i++)
{
summe = summe + zahl;

}

cout << "Die Summe der Zahlen ist " << summe << endl;





return 0;

}


Woran liegt das denn?!?!?!
 
laufen die beiden for-schleifen tatsächlich unabhängig? wär da nicht ne verschachtelung sinnvoller? also mit jedem step zahl einlesen und summe bestimmen, bevor es zum nächsten step geht?

edit: ist zahl nicht als vektor mit 9 elementen definiert, aber es werden 10 zugeordnet?

edit2: vergiss es, ist wohl doch zu spät für mich :D
 
Zuletzt bearbeitet:
Dein Array Zahl hat nur 9 Felder, du greifst aber mit zahl auch auf das 10. Feld (Index 9) zu. Dadurch könnte das ganze kaputt gehen, weil das 10. Feld nicht initialisiert ist.

odif
 
Dein Array Zahl hat nur 9 Felder, du greifst aber mit zahl auch auf das 10. Feld (Index 9) zu. Dadurch könnte das ganze kaputt gehen, weil das 10. Feld nicht initialisiert ist.

odif


Nee es fängt doch bei 0 an zu zählen. Arrays werden ja von 0-x angelegt.
 
Nee es fängt doch bei 0 an zu zählen. Arrays werden ja von 0-x angelegt.

du hast zahl 9 einträge spendiert
0 ist der erste von 9,
1 ist der zweite von 9,
...
8 ist der neunte von 9,
und 9 ist der zehnte von 9 :D
 
  • Gefällt mir
Reaktionen: SumpfMonsterJun, ternek57 und .:timmy
Genau das ist auch der Fehler an dem Code :)
 
du initialisierst das array mit

int zahl[9];

sprich mit einem array, das aus 9 feldern besteht. gezählt wird beginnend mit 0, richtig, aber nur bei dem ansprechen der indizes. du greifst also bei zahl[9] in einen nicht inizialisierten bereich hinein.
 
  • Gefällt mir
Reaktionen: SumpfMonsterJun und below
Hmm stimmt, wenn ich den array mit 10 initialisiere geht es. Aber warum denn jetzt? Wenn ich den mit 9 initialisiere hat er doch 10 "Speicherlätze", oder wie man das nennt. Nämlich 0,1,2,3,4,5,6,7,8,9. Ist das denn wie bei char Variablen, die den letzten Platz für das "\0" benutzen?
 
Hmm stimmt, wenn ich den array mit 10 initialisiere geht es. Aber warum denn jetzt? Wenn ich den mit 9 initialisiere hat er doch 10 "Speicherlätze", oder wie man das nennt.
halt, denkfehler: init mit 9 erstellt 9 felder, nicht 10!

init mit 1 erstellt ein feld, das mit 0 nummeriert (angesprochen) wird.
 
  • Gefällt mir
Reaktionen: ternek57
nein, wenn du mit 9 initialisierst, hast du 9 stellen! das hat nichts mit dem index sondern wirklich mit der anzahl zutun! du willst 10 int's, die von 0 bis 9 nummeriert werden. also initialisierst du auch mit

int zahl[10].
 
  • Gefällt mir
Reaktionen: SumpfMonsterJun und ternek57
nöö, hat er nicht. int zahl[9] legt ein array mit 9 Plätzen an. Von zahl[0] bis zahl[8]
 
Achsooooo. Das ist ja etwas unlogisch gemacht, aber naja. Also 10 Felder werden initialisiert und wenn ich aufs 10. zugreifen will muss ich die Adresse [9] nehmen, weil das erste [0] ist.

Okay, vielen Dank.
 
Achsooooo. Das ist ja etwas unlogisch gemacht, aber naja. Also 10 Felder werden initialisiert und wenn ich aufs 10. zugreifen will muss ich die Adresse [9] nehmen, weil das erste [0] ist.
exakt, siehe posting #5
 
Das ist überhaupt nicht unlogisch. Wo ist den bei Dir der 1. Stock? Ebenerdig?

Alex

Nein, aber das Erdgeschoss ist bei mir auch nicht der 0. Stock ;). Das ist in anderen Sprachen übrigens auch anders, da ist der 1. Stock auch mal das Erdgeschoss. Und wenn ich ein zehnstöckiges Gebäude baue ist ganz oben der 10. Stock. Aber egal, c++ lerne ich ja erst.
 
Nee, bei mir ist der erste Stock stock[1]. stock[0] nennt man auch "Ergeschoss"

schreib mal alle stocks der reihe nach auf - welcher ist der erste in der liste? stock[0] :D

stock[0]
stock[1]
stock[2]
...
 
Nein, aber das Erdgeschoss ist bei mir auch nicht der 0. Stock ;). Das ist in anderen Sprachen übrigens auch anders, da ist der 1. Stock auch mal das Erdgeschoss. Und wenn ich ein zehnstöckiges Gebäude baue ist ganz oben der 10. Stock. Aber egal, c++ lerne ich ja erst.

Mir ist keine Entsprechung zu "Stock" in anderen Sprachen bekannt. Du verwechselst das vielleicht mit Etage oder Geschoss ;) Im Deutschen wird auf das Erdgeschoss aufgestockt.
 
Mir ist keine Entsprechung zu "Stock" in anderen Sprachen bekannt. Du verwechselst das vielleicht mit Etage oder Geschoss ;) Im Deutschen wird auf das Erdgeschoss aufgestockt.

Mhm... blaaa!
 
Zurück
Oben Unten