Seite 1 von 1

[c++]Anfänger prob [gelöst]

Verfasst: 29.01.2007 22:56
von Vallan
Hi,
ich habe mir überlegt mal C++ zulehrnen und bin dabei aber gleich auf folgendes Problem gestoßen:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main()
{
int Anzahl;
int Position;
int Summand;
int positive_Summe;
int negative_Summe;

printf("Wieviele Zahlen sollen eingegeben werden?");
scanf("%d",Anzahl);

fflush(stdin); //muss das seien oder ist das ein Unwichtiger befehl?

positive_Summe = 0;
negative_Summe = 0;

for ( ; Anzahl ; Anzahl = Anzahl - 1)
{
printf("Bitte die Zahl eingeben: ");
scanf("%d", Summand);

fflush( stdin); // muss das seien ?

if (Summand > 0)
positive_Summe = positive_Summe+Summand;
else 
negative_Summe = negative_Summe+Summand; // -0 bringt ja nix ... 
}
printf("Gesamtsumme aller positiven Zahlen: %d\n", positive_Summe);
printf("Gesamtsumme aller negativen Zahlen: %d\n", negative_Summe);
printf("Gesamtsumme: %d\n", positive_Summe+negative_Summe);


 system("PAUSE");	
  return 0;
}
Könnte mir bitte einer sagen warum das nicht geht???

Vielen dank schonmal!

Verfasst: 29.01.2007 23:10
von ZeHa
Die würde ich einfach folgendermaßen machen:

Code: Alles auswählen

for(int i=0; i<Anzahl; i++)
Erklärung:
Die erste Angabe definiert Deine Zählvariable, in dem Fall i, und setzt sie auf einen Startwert, in unserem fall 0. Die zweite Angabe gibt die Bedinung an, unter der die Schleife ausgeführt wird, in unserem Fall wird die Schleife also solange ausgeführt, wie i kleiner als Anzahl ist. Und zu guter Letzt gibst Du an, was sich in Deiner Schleife ändert, hier also daß i bei jedem Aufruf um 1 erhöht wird.

Andererseits könnte ich mir dennoch vorstellen, daß Deine Schleife funktionieren könnte. Immerhin ist Deine Bedingung "Anzahl", was bedeutet, daß Anzahl != 0 sein muß, und diese Variable wird ja bei jedem Durchlauf um 1 vermindert. Möglicherweise liegt es ganz einfach an dem scanf("%d", Anzahl), probier dort mal ein %i statt dem %d aus.

Aufgrund der besseren Lesbarkeit würd ich aber dennoch eine Zählvariable in die Schleife einbauen, oder die Schleife (sofern es funktioniert) wenigstens so umschreiben:

Code: Alles auswählen

for( ; Anzahl > 0; Anzahl--)

Verfasst: 29.01.2007 23:59
von Vallan
ich hab den fehler gefunden!!
War nix dergleichen :oops:
sondern

Code: Alles auswählen

scanf("%d",Anzahl); 

und

Code: Alles auswählen

scanf("%d", Summand); 


sind falsch.
Warum das Prog immer erst beim 2. mal abstürtzt weiß ich nicht (Ist bei PB bei einem Invalied memory acess auch so...)

ich muss staddessen den POINTER angeben also:

Code: Alles auswählen

scanf("%d", &Summand); 

Verfasst: 30.01.2007 02:47
von Kaeru Gaman
> War nix dergleichen

trotzdem solltest du den schleifenkopf etwas ändern...

mag sein dass "Anzahl" als endbedingung genauso gut läuft wie "Anzahl > 0",
aber wenigstens solltest du den Basic-typischen ausdruck "Anzahl = Anzahl - 1"
durch das C-typische "Anzahl--" ersetzen.

nicht nur, dass genau diese form ausdruck einige der besonderen stärken von C ermöglicht,
ich meine mich zu erinnern, dass er auch in effektiveren ASM-code compiliert wird.

Verfasst: 30.01.2007 03:08
von Green Snake
>>dass er auch in effektiveren ASM-code compiliert wird.
Ist bei der PB auch so (Var + 1) wird nicht mehr in ADD, sondern in INC kompiliert.

Wobei das wieder ein ganz anderes Thema ist :mrgreen: