Mein erstes Programm, was ist falsch ??
-
Hallo,
mein Name ist Michael bin Student und ich absolut neu hier.
Bitte Euch daher nicht über meine "dummen" Fragen zu lachen
Bin erst gerade mit Visual C++ angefangen, da wir gerade Semesterferien haben und ab nächstem Semester in Inf mit Visual C++ 6.0 programmieren werden....Bei meinem Programm, dessen Source-Code gleich folgt, habe ich eine Abfrage programmiert, ob eine eingegebene Zahl durch zwei teilbar ist oder nicht...
Und zwar sollen die Funktionen zur Ausgabe des Ergebnisses (Bestandteil der If-Abfrage) ausserhalb von main() definiert sein...
habe versucht mit Zeigern zu arbeiten, aber irgendwie klappt das nicht so wirklichBitte Euch daher um Verbesserungsvorschläge, Tipps....,
Danke
#include <iostream> using namespace std; int main() { int* a; int b = 2; void nteil(), teil(); cout << "Bitte geben Sie eine Zahl ein: "; cin >> a; if (a % b == 1) { nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int* zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga/2 << "\n"; }
Beim Compilieren kommen folgende Fehler:
--------------------Konfiguration: Gerade oder ungerade - Win32 Debug--------------------
Kompilierung läuft...
Gerade oder ungerade.cpp
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Gerade oder ungerade.cpp(11) : error C2679: Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'int *' akzeptiert (oder keine geeignete Konvertierun
g moeglich)
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Gerade oder ungerade.cpp(13) : error C2296: '%' : Ungültig, da der linke Operand vom Typ 'int *' ist
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Gerade oder ungerade.cpp(31) : error C2296: '/' : Ungültig, da der linke Operand vom Typ 'int *' ist
Fehler beim Ausführen von cl.exe.Gerade oder ungerade.exe - 3 Fehler, 0 Warnung(en)
DANKE
-
zu aller erst ist a bei dir ein zeiger und für die gibt es keine modulo-operation (einfach das * wegnehmen)
und dann kann man funktionen nicht innerhalb von funktionen deklarieren. das ist hier kein pascal :p
am besten vor main einfügen:
void nteil(); void teil(int*);
oder aber die funktionen direkt, ohne forward declaration definieren.
wie audacia sagt: zeiger muss man auch dereferenzieren ^^
-
[cpp]
#include <iostream>
using namespace std;int main()
{
int* a;
int b = 2;
void nteil(), teil();
cout << "Bitte geben Sie eine Zahl ein: ";
cin >> *****a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigtif (*****a % b == 1)
{
nteil();
}
else
{
teil();
}
return 0;
}void nteil()
{
cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
}void teil(int* zeiga)
{
cout << "\nDas Ergebnis der Division lautet: " << *****zeiga / 2 << "\n";
}
[/cpp]
-
high_med schrieb:
#include <iostream> using namespace std; int main() { int* a; // a ist ein zeiger, er ist aber noch tot. du hast ihm noch keinen speicherplatz zugewiesen int b = 2; cout << "Bitte geben Sie eine Zahl ein: "; cin >> a; // ooops, du versuchst die adresse auf die a zeigt zu ändern. if (a % b == 1) // die adresse von a modulo den wert von b :) { nteil(); } else { teil(); // teil erwartet ein int* } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int* zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga/2 << "\n"; }
ich würds so machen
#include <iostream> using namespace std; void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int a) { cout << "\nDas Ergebnis der Division lautet: " << a << "\n"; } int main() { int a; const int b = 2; cout << "Bitte geben Sie eine Zahl ein: "; cin >> a; if (a % b == 1) nteil(); else teil(a/b); return 0; }
-
@audacia: so a schmäh!! lass doch den zeiger weg -.-
-
Du mußt die funktionen schon vorher bekannt machen wenn du sie in main aufrufen willst. außerdem rufst du teil(); auf obwohl du festgelegt hast, daß die funktion ein argument bekommen soll.
-
Danke erstmal für die superschnellen Antworten...
Habe den unteren Code kopiert, tritt aber beim Compilieren folgende Meldungen auf...,
was heisst das ??Kompilierung läuft...
Gerade oder ungerade.cpp
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Gerade oder ungerade.cpp(11) : warning C4700: Lokale Variable 'a' wurde ohne Initialisierung verwendet
Linker-Vorgang läuft...
Gerade oder ungerade.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __cdecl teil(void)" (?teil@@YAXXZ)
Debug/Gerade oder ungerade.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Gerade oder ungerade.exe - 2 Fehler, 1 Warnung(en)
*Sorry wenn ich nerv*
-
audacia schrieb:
[cpp]
#include <iostream>
using namespace std;int main()
{
int* a;
int b = 2;
void nteil(), teil();
cout << "Bitte geben Sie eine Zahl ein: ";
cin >> *****a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigtif (*****a % b == 1)
{
nteil();
}
else
{
teil();
}
return 0;
}void nteil()
{
cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
}void teil(int* zeiga)
{
cout << "\nDas Ergebnis der Division lautet: " << *****zeiga / 2 << "\n";
}
[/cpp]?????
was ist dennvoid nteil(), teil();
ausserdem hast du vergessen a = new int zu machen...
-
... void nteil(); ... teil(); ...void teil(int* zeiga) ...
das geht schief, wenn du deiner funktion einen integer übergeben möchtest dann deklariere es auch so und rufe es so auf:
... void nteil(int); ... teil(deine_zahl); ...void teil(int zeiga) ...
-
Boah, borg kann schon Anfängeraufgaben lösen
-
Michael E. schrieb:
Boah, borg kann schon Anfängeraufgaben lösen
ihr werdet alle staunen wenn meine wpc lösung die schnellste ist
-
Sorry, immer noch nicht
#include <iostream> using namespace std; int main() { int* a; a = new int; int b = 2; void nteil(), teil(); cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int* zeiga) { cout << "\nDas Ergebnis der Division lautet: " << *zeiga / 2 << "\n"; }
lässt sich noch nicht ausführen..
-
da sind ja auch 2 dicke fehler drin, nimm meins.
oder mach das "void nteil(), teil();" raus und informier dich über pointer.
-
borg schrieb:
Michael E. schrieb:
Boah, borg kann schon Anfängeraufgaben lösen
ihr werdet alle staunen wenn meine wpc lösung die schnellste ist
Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.
-
borg schrieb:
da sind ja auch 2 dicke fehler drin, nimm meins.
Tus nicht. Da ist der Lerneffekt = 0.
-
high_med schrieb:
...lässt sich noch nicht ausführen..
ja natürlich nicht, siehe meinen letzten beitrag
-
Michael E. schrieb:
borg schrieb:
Michael E. schrieb:
Boah, borg kann schon Anfängeraufgaben lösen
ihr werdet alle staunen wenn meine wpc lösung die schnellste ist
Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.
Lol, MichaelE. entscheidet was gefragt ist und was nicht
-
No comment.
-
Ich nerve mich ja schon selber, Ihr entschuldigt...
Die Fehler:
Gerade oder ungerade.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __cdecl teil(void)" (?teil@@YAXXZ)
Debug/Gerade oder ungerade.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Gerade oder ungerade.exe - 2 Fehler, 0 Warnung(en)
#include <iostream> using namespace std; int main() { int* a; a = new int; int b = 2; void nteil(), teil(); cout << "Bitte geben Sie eine Zahl ein: "; cin >> *a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt if (*a % b == 1) { void nteil(); } else { teil(); } return 0; } void nteil() { cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n"; } void teil(int zeiga) { cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n"; }
Ach Menno....
-
Du kannst eine Funktion nicht in einer anderen deklarieren, das musst du vor main() machen.
Ich nerve mich ja schon selber, Ihr entschuldigt...
Frag soviel du willst und noch mehr. Sonst lernt man ja nie