myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Wo ist der Fehler?

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 09.02.11, 23:31   #1
effective
Newbie
 
Benutzerbild von effective
 
Registriert seit: Nov 2010
Ort: PL
Beiträge: 83
Bedankt: 48
effective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkte
Standard Wo ist der Fehler?

Hallo Leute,

ich probiere gerade ein bisschen rum, jedoch erkenne ich den Fehler nicht. Es wird immmer das 1. Ereignis ausgegben von bomk für bong und pstar?

Was ist daran verkehrt?

Code:
#include <iostream>

using namespace std;

void main()
{
	int Namen; 
	int bomk=1, bong=1, pstar=1;
	cout <<"Welchen Namen möchten Sie benutzen?:\nbomk\nbong\npstar\n\n";
	cin >> Namen;
	if (Namen = bomk)
	{
		cout << "Low";
	}
	else if (Namen = bong)
	{
		cout << "Test";
	}
	else if (Namen = pstar)
	{
		cout << "Bla";
	}
	system("pause");
}
effective ist offline   Mit Zitat antworten
Ungelesen 09.02.11, 23:39   #2
gosha16
Banned
 
Registriert seit: Sep 2009
Ort: /root/
Beiträge: 825
Bedankt: 640
gosha16 ist noch neu hier! | 0 Respekt Punkte
Standard

if(x == y)
gosha16 ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 00:31   #3
effective
Newbie
 
Benutzerbild von effective
 
Registriert seit: Nov 2010
Ort: PL
Beiträge: 83
Bedankt: 48
effective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkte
Standard

Code:
if (Namen == bomk)
funktioniert nicht, dann gibts beispielsweise bei bong überhaupt keine Ausgabe mehr
effective ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 01:04   #4
cjs
Anfänger
 
Registriert seit: Nov 2010
Beiträge: 8
Bedankt: 1
cjs ist noch neu hier! | 0 Respekt Punkte
Standard

Was willst Du überhaupt machen?
Der Code im ersten Post hat gleich mehrere Fehler!

1. = ist eine Zuweisung, kein Vergleich
In deiner ersten if weist Du der Variablen Namen den Wert von bomk (1) zu.
Die Bedinung ist dann erfüllt (true), wenn der Inhalt der beiden Variablen nicht 0 ist.
Sprich: Im Moment setzt du Namen=1, damit ist die Bedingung erfüllt.
Würdest Du bspw. if(Namen=0) schreiben, wäre die Bedingung nicht erfüllt.

2. Du willst einen Vergleich machen, deshalb musst Du == schreiben.
if(Namen == bomk) ist schonmal richtiger, aber an sich immernoch falsch.

Um mal in Worten zu erklären, was dein Programm aktuell macht:
Du deklarierst die Integer-Variable Namen, weist ihr aber noch keinen Wert zu.
Du deklarierst die Variablen bomk, bong und pstar und initialisierst sie alle mit dem Wert 1.
Du hast jetzt also an sich 3 identische Variablen.

Jetzt liest du von der Konsole einen Wert ein und speicherst ihn in der Variablen Namen.
So weit so gut, aber jetzt:

Du prüfst im ersten Fall, ob der Inhalt (!) der Variablen Namen mit dem Inhalt (!) der Variablen bomk übereinstimmt.
Das ist der Fall, wenn der User in der Konsole die 1 eingetippt hat, weil du ja bomk=1 initialisiert hast.

Wenn der User aber nicht die 1 sondern bspw. die 2 eintippt, dann ist diese Bedingung nicht erfüllt, (weil der Inhalt von Namen ist 2, der Inhalt von bomk ist 1).
Also gehts weiter im Code.
Jetzt wird verglichen, ob der Inhalt der Variablen Namen mit dem Inhalt der Variablen bong übereinstimmt. Du hast bong aber mit 1 initialisiert.
Der Fall, dass Namen == 1 ist, ist aber schon bei bomk abgearbeitet worden.

Stattdessen müsstest Du also nur bong mit 2 und pstar mit 3 initialisieren (und natürlich als user 1,2 oder 3 eingeben).

Und nicht vergessen, bei allen if-Vergleichen zwischen die Variablen ein == statt ein = zu setzen.
Damit sollte es dann funktionieren
cjs ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 01:13   #5
effective
Newbie
 
Benutzerbild von effective
 
Registriert seit: Nov 2010
Ort: PL
Beiträge: 83
Bedankt: 48
effective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkte
Standard

Das Problem ist aber, das ich nicht 1,2 oder 3 eingeben möchte, sondern die Nicknames
effective ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 01:21   #6
Erebos76
Ist öfter hier
 
Benutzerbild von Erebos76
 
Registriert seit: Sep 2010
Beiträge: 276
Bedankt: 280
Erebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt Punkte
Standard

Warum deklarierst Du sie dann als Integer und nicht als String?
Erebos76 ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 01:34   #7
cjs
Anfänger
 
Registriert seit: Nov 2010
Beiträge: 8
Bedankt: 1
cjs ist noch neu hier! | 0 Respekt Punkte
Standard

Dann funktioniert das so mal ganz und gar nicht...
Du willst also einen Text als User eingeben und versuchst den dann in Namen zu speichern. Namen ist aber vom Typ int, also vorzeichenbehaftete Ganzzahlen (~~-4 Mio, ... -1, 0, 1, 2, ... ~~4Mio)
Darin kannst Du also den eingelesenen Kram gar nicht speichern. Eigentlich sollte dir das ganze so einen Laufzeitfehler produzieren. Du musst die eingelesenen Daten also entweder in einem char-Array oder einem string speichern (string = Zeichenkette, nicht das was Du jetzt wieder denkst).

Aufgrund deiner bisherigen Probleme, nehme ich mal an, dass Du relativ frisch in C++-Programmierung bist, weshalb wir das mit dem Array erst mal hinten anstellen (Du wirst im weiteren Verlauf bei halbwegs effektiver Programmierung eh nicht dran vorbei kommen:-P )

Du brauchst also den Datentyp string. Den gibts in C++ nicht einfach so standardmäßig, deshalb muss der erst eingebunden werden
Code:
#include <string>
Dann kannst Du ihn wie jeden anderen Datentyp auch verwenden
string Namen;
Auch die drei anderen Variablen (bomk und Co.) kannst Du löschen (ein Glück. Ich musste JEDESmal hochscrollen um zu gucken, wie die jetzt heißen).
Stattdessen codierst Du die möglichen Namen einfach hart in den Programmcode. (Das wirst Du später anders machen [wollen], aber jetzt ists einfacher und führt auch zum Ergebnis.)

Dann wäre noch zu sagen, dass Du den Inhalt, den Du in string-Variablen schreibst (oder damit vergleichst etc.) immer hin doppelte Anführungsstriche " setzen musst.
Namen = "bomk"; speichert also bomk selber in der Variablen.
Namen = bonk; würde hingegen den Inhalt (!) der Varbiablen bonk in Namen speichern.

Der Code müsste dann in etwa so aussehen:

Code:
#include <iostream>
#include <string>

using namespace std;


void main()
{
	string Namen; 
	cout <<"Welchen Namen möchten Sie benutzen?:\nbomk\nbong\npstar\n\n";
	cin >> Namen;
	if (Namen == "bomk")
	{
		cout << "Low";
	}
	else if (Namen == "bong")
	{
		cout << "Test";
	}
	else if (Namen == "pstar")
	{
		cout << "Bla";
	}
	system("pause");
}
Ich hab den Code jetzt allerdings nicht getestet ;-)
cjs ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 01:46   #8
effective
Newbie
 
Benutzerbild von effective
 
Registriert seit: Nov 2010
Ort: PL
Beiträge: 83
Bedankt: 48
effective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkteeffective mag den Abfluss Flavour! | 49416 Respekt Punkte
Standard

Funktioniert einwandfrei, danke für die Hilfe

Ja ich bin relativ frisch (seit ungefähr 2 Tagen )
effective ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 01:52   #9
cjs
Anfänger
 
Registriert seit: Nov 2010
Beiträge: 8
Bedankt: 1
cjs ist noch neu hier! | 0 Respekt Punkte
Standard

Bitte, gerne :-)

Noch das obligatorische: Wenn Du wirklich lernen willst wie das geht, dann leg Dir mal ein gutes Buch zu. Ich weiß, alle schreien bei sowas gleich nach Büchern. Aber ich hab die Erfahrung gemacht, dass man am besten lernt, wenn man schrittweise vorgeht und nicht als allererstes mal zusätzliche Klassen (string ;-) ) einfügt.

Im Zweifel einfach mal bei Wiki-Books C++ eintippen. Ich denke der Wunsch nach einem vernünftigen (gedruckten) Lehrbuch kommt mit der Zeit eh von alleine ;-)

Gruß und viel Spaß :-)
cjs ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 06:33   #10
gosha16
Banned
 
Registriert seit: Sep 2009
Ort: /root/
Beiträge: 825
Bedankt: 640
gosha16 ist noch neu hier! | 0 Respekt Punkte
Standard

mit if bitte keine strings vergleichen, das könnte nach hinten losgehen.
Nutze stattdessen strcmp() oder ein C++ Äquivalent, sofern es eins gibt.
gosha16 ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 07:37   #11
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 311
Bedankt: 301
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Bei string ist normalerweise der ==-Operator so überladen, dass er ohne Probleme funktioniert. Ich würde es auf jeden Fall so lassen.
germgerm ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 15:36   #12
Erebos76
Ist öfter hier
 
Benutzerbild von Erebos76
 
Registriert seit: Sep 2010
Beiträge: 276
Bedankt: 280
Erebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt PunkteErebos76 leckt gerne myGully Deckel in der Kanalisation! | 332975 Respekt Punkte
Standard

Zitat:
Zitat von cjs Beitrag anzeigen
(string = zeichenkette, nicht das was du jetzt wieder denkst).
Nice
Erebos76 ist offline   Mit Zitat antworten
Ungelesen 10.02.11, 15:39   #13
gosha16
Banned
 
Registriert seit: Sep 2009
Ort: /root/
Beiträge: 825
Bedankt: 640
gosha16 ist noch neu hier! | 0 Respekt Punkte
Standard

Oh das wusst ich nicht germgerm, sorry
gosha16 ist offline   Mit Zitat antworten
Ungelesen 11.02.11, 19:20   #14
Thelvan
Erfahrenes Mitglied
 
Registriert seit: Jul 2010
Beiträge: 493
Bedankt: 236
Thelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt Punkte
Standard

Hab zwar eher wenig Ahnung von C++, aber sollte man diesen ganzen If-Baum nicht einfach durch ein Switch-Case erstzen?
Thelvan ist offline   Mit Zitat antworten
Ungelesen 11.02.11, 19:28   #15
cjs
Anfänger
 
Registriert seit: Nov 2010
Beiträge: 8
Bedankt: 1
cjs ist noch neu hier! | 0 Respekt Punkte
Standard

Kann man durchaus machen. Viele Wege führen nach Rom.
Aber da der Threadersteller ja gerade erst eingestiegen ist, wollte ich ihm nicht erklären, warum er alles ganz anders machen sollte, sondern ihm bei seinem eigentlichen Problem (if-Bedingung) helfen.
cjs ist offline   Mit Zitat antworten
Ungelesen 12.02.11, 09:48   #16
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 311
Bedankt: 301
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Thelvan Beitrag anzeigen
Hab zwar eher wenig Ahnung von C++, aber sollte man diesen ganzen If-Baum nicht einfach durch ein Switch-Case erstzen?
Nein, geht nicht.
Switch kann im Case nur mit normalen Konstanten arbeiten.
germgerm ist offline   Mit Zitat antworten
Ungelesen 12.02.11, 12:04   #17
cjs
Anfänger
 
Registriert seit: Nov 2010
Beiträge: 8
Bedankt: 1
cjs ist noch neu hier! | 0 Respekt Punkte
Standard

Was sind denn "normale Konstanten"?
Schau Dir mal meine Lösung an ( [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] ) die effective wohl auch übernommen hat. Dort stehen die Namen ja jeweils in " " fest im Code. Meinst Du das mit "normalen Konstanten"? Weil dieser Code müsste -meiner bescheidenen Meinung nach- absolut problemlos durch ein switch-case-Konstrukt ersetzt werden können.

Code:
#include <iostream>
#include <string>

using namespace std;


void main()
{
	string Namen; 
	cout <<"Welchen Namen möchten Sie benutzen?:\nbomk\nbong\npstar\n\n";
	cin >> Namen;

	switch (Namen)
	{
		case "bomk":
			cout << "Low";
			break;
		case "bong":
			cout << "Test";
			break;
		case "pstar":
			cout << "Bla";
			break;
	}
	system("pause");
}
Aber auch dieser Code ist jetzt nicht getestet, weshalb ich (insbesondere Syntax-) Fehler nicht ausschließe ;-)
cjs ist offline   Mit Zitat antworten
Ungelesen 12.02.11, 12:34   #18
AllYouCanEat
Banned
 
Registriert seit: Jan 2011
Beiträge: 16
Bedankt: 12
AllYouCanEat ist noch neu hier! | 0 Respekt Punkte
Standard

So dumm kann doch keiner sein!

Das muss ein Troll sein!
AllYouCanEat ist offline   Mit Zitat antworten
Ungelesen 12.02.11, 17:32   #19
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 311
Bedankt: 301
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von cjs Beitrag anzeigen
Weil dieser Code müsste -meiner bescheidenen Meinung nach- absolut problemlos durch ein switch-case-Konstrukt ersetzt werden können.
Das funktioniert vielleicht in C#, aber nicht in C++.

"bomk", "bong", "pstar" sind in C keine normalen Konstanten. Vereinfacht ausgedrückt sind das C-Strings, auf die ein Pointer zeigt.
germgerm ist offline   Mit Zitat antworten
Ungelesen 02.03.11, 21:56   #20
isaak
Anfänger
 
Registriert seit: Jul 2009
Beiträge: 3
Bedankt: 2
isaak ist noch neu hier! | 0 Respekt Punkte
Standard

jepp, wird nicht mit switch funktionieren.

switch funktioniert nur bei datentypen, die auf nen integer abgebildet werden können.
isaak ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.


Sitemap

().