Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
29.04.2002, 13:19
Ornest



Jo, ich habe mal ein kleines billiges Programm programmiert. Es liest 2 Zahlen ein und multipliziert sie und gibt das Ergebnis aus. Doch dieses ist immer 0!
Hier ein Bild:

Und hier der Quelltext:
Quellcode:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

#define BUFFER ( cin >> buffer )

char buffer;
int x_achse;
int y_achse;
int ergebnis = ( x_achse * y_achse );

void main()
{
    cout << "Wert fuer X-Achse eingeben: ";
    cin >> x_achse;

    cout << "Wert fuer Y-Achse eingeben: ";
    cin >> y_achse;

    cout << endl;
    cout << "X-Achse = " << x_achse << endl;
    cout << "Y-Achse = " << y_achse << endl;
    cout << "Ergebnis = X-Achse * Y-Achse" << endl << endl;

    cout << x_achse << " * " << y_achse << " = " << ergebnis << endl;

    cout << "Das Feld betraegt " << ergebnis << " Units" << endl;
    BUFFER;
}

Mir ist das schon öfters passiert und ich habe es irgendwie auch wieder hinbekommen, aber ich vergesse immer wie :|

--

zum Seitenanfang zum Seitenende Profil || Suche
001
29.04.2002, 13:53
Mazze



Logisch.
1. Wieso deklarierst du alle Variblen global?
2. Du definierst ja ergebnis bevor du weißt was x- und y-achse íst!

Du könntest entweder eine Funktion schreiben, oder einfach so:
Quellcode:
cout << x_achse << " * " << y_achse << " = " << x_achse * y_achse << endl;

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
002
29.04.2002, 14:16
__ZERO__



also mich wundert das nich ;) Bei folgender zeile wird x_achse * y_achse gerechnet, aber beide Variablen sind noch gleich 0:

Quellcode:
int ergebnis = (x_achse * y_achse);

Deklariere ergebnis als int und berechne vor der Ausgabe des Ergebnisses folgendes:

Quellcode:
ergebnis = x_achse * y_achse

--

zum Seitenanfang zum Seitenende Profil || Suche
003
29.04.2002, 15:51
Tron



Zitat:
int ergebnis = ( x_achse * y_achse );

das ist eine zuweisung und keine gleichung im mathematischen sinne!

btw: DAS: #define BUFFER ( cin >> buffer ) ist uberevil

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
004
29.04.2002, 16:21
__ZERO__



soll mir doch egal sein was es is auf jedenfall liegts draan

--

zum Seitenanfang zum Seitenende Profil || Suche
005
29.04.2002, 17:24
Ornest



Ok, danke erstmal für die Hilfe und das BUFFER (*g*) habe ich nur gemacht, um mir alles anzusehen.

--

zum Seitenanfang zum Seitenende Profil || Suche
006
29.04.2002, 17:33
thinktank



Zitat:

[...]aber beide Variablen sind noch gleich 0

Man kann nur bei als static deklarierten Variablen davon ausgehen, dass sie
"automatisch" mit 0 intialisiert werden. Sonst ist der Wert undefiniert.

--


Dieser Beitrag wurde am 29.04.2002 um 17:33 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
01.05.2002, 15:50
thinktank



Ok , ist falsch, was ich gesagt habe. Da die beiden Variablen global sind, sind sie automatisch static. Sorry !

--

zum Seitenanfang zum Seitenende Profil || Suche
008
01.05.2002, 18:12
Tron



globale variablen sind nicht automatisch static, sie sind nur automatisch auto

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
009
01.05.2002, 18:49
Onkel Dittmeyer



Mal ne frage (nicht lachen =) kann gerade net testen weil ich heute formatiert hab)
Wenn ich ne globale Variable deklariere und die in ner Funktion nutzen will, brauch ich noch den Scope Operator oder gehts auch ohne?

--

zum Seitenanfang zum Seitenende Profil || Suche
010
01.05.2002, 22:41
Kriz



Den Scope-Operator brauchst du erst, wenn du in einer Funktion eine lokale Variable hast, die genauso heißt wie eine globale Variable:
Quellcode:int i = 10; // Globales i

void Foo(void)
{
    int i = 5; // Lokales i
    cout << "Global = " << ::i << "\nLokal = " << i << endl;
}

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
011
12.05.2002, 18:27
-]wurm[-



machs doch einfach so:
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#define BUFFER ( cin >> buffer )

char buffer;

void main( void )
{
int x_achse;
int y_achse;
int ergebnis;

cout << "Wert fuer X-Achse eingeben: ";
cin >> x_achse;
cout << "Wert fuer Y-Achse eingeben: ";
cin >> y_achse;
cout << "X-Achse = " << x_achse << '\n';
cout << "Y-Achse = " << y_achse << '\n';
cout << "Ergebnis = X-Achse * Y-Achse" << '\n';
ergebnis = x_achse * y_achse;
cout << x_achse << " * " << y_achse << " = " << ergebnis << '\n';
cout << "Das Feld betraegt " << ergebnis << " Units";
BUFFER;
}

das ist dann wohl das einfachste für dein problem :]

--

Leveldesigner bei Dark-Zone

zum Seitenanfang zum Seitenende Profil || Suche
012
12.05.2002, 22:14
Leviathan



Zitat:

also mich wundert das nich ;) Bei folgender zeile wird x_achse * y_achse gerechnet, aber beide Variablen sind noch gleich 0:

Code:
int ergebnis = (x_achse * y_achse);


soviel ich weiss sind die beiden variablen noch nichtmal 0 sondern undefiniert (d.h. sie haben den wert, der vorher in ihrem speicherbereich stand).
wenn es so oder so ähnlich machen willst, dann mit einem #define:
Quellcode:
#define ergebnis (x_achse*y_achse)

(ist aber böse)

@wurm: was du in 011 gepostet hast ist noch nichtmal die einfachste lösung, die ist nämlich folgende:
Quellcode:
#include <iostream.h>
void main( void )

{
int x_achse;
int y_achse;

cout << "Wert fuer X-Achse eingeben: ";
cin >> x_achse;
cout << "Wert fuer Y-Achse eingeben: ";
cin >> y_achse;
cout << "X-Achse = " << x_achse << '\n';
cout << "Y-Achse = " << y_achse << '\n';
cout << "Ergebnis = X-Achse * Y-Achse" << '\n';
cout << x_achse << " * " << y_achse << " = " << x_achse*y_achse << '\n';
cout << "Das Feld betraegt " << x_achse*y_achse << " Units";
}

noch ein paar fragen: was ist der scope-operator? der doppelte doppelpunkt? (::)
und was sollte das mit dem buffer? tastendruck zum beenden? das macht man aber besser mit getch();

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
013
12.05.2002, 22:30
Onkel Dittmeyer



Der Scope-Operator (Auch glaub ich Zugriffsoperator gennant) legt den Scope (Sichtbarkeitsbereich) einer Variablen (z.B. ein Attribut einer Klasse) oder einer Funktion fest.
D.h. wenn du auf die Variable einer bestimmten Klasse zugreifen willst musst du sagen CDeineKlasse::DeineVariable
Oder wie Kriz mal auf Frage geantwortet hat: Wenn du ne globale Variable deklarierst und in einer bestimmten Funktion hast die genauso heißt dann musst du ja unterscheiden können welche der beiden Variablen du benutzen willst. Und das kann man eben damit.

--


Dieser Beitrag wurde am 12.05.2002 um 22:31 von [dP]ThEpOpE bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche