Frage zu "for" schleifen
-
Hallo ,
Ich will eine schleife haben mit for und so das wenn ich in die Console schreibe a soll der 10 mall eine name schreiben wenn b soll der 100 mal eine name schreiben
bis jetzt siet mein cod so aus :#include<iostream> #include<string> using namespace std; string qwer (string pName) { if (pName == "a") { for (int a = 1; a >= 10; a ++1) { cout << a << "Nick" << endl; } } else if (pName == "b") { for (int b = 1; b >= 100; b ++1) { cout << b << "Damian" << endl; } } else { return "Kein Buchstabe gefunden!" ; } } int main() { string name; cout << "Bitte geben Sie ein Buchstabe ein: "; cin >> name; cout << qwer(name); return 0; }Bitte nicht nur cod ersetzen sondern müglichst erkleren damit ich bei nexten mall selber weiß.
Tut mit leid wegen mein Deutsch.danke vor raus .
MFG Progress
-
for( int a = 0; a != 100; ++a )Größer- bzw Kleinerzeichen ist falschrum! Entweder umdrehen (a<=100) oder != verwenden
-
ghet nicht
zeigt immer noch die selbern fellers.
-
Wen ich grob über deine qwer Funktion blicke, sehe ich, dass du damit nur etwas ausgeben willst, sprich du musst nichts zurückgeben -> void anstelle string
Dann sehe ich noch, dass du deine Zählvariable falsch inkrementierst:
b++ bzw. ++b (entspricht b=b+1), je nachdem wie dus brauchst statt b++1.. selbe gilt für a
-
Hi -ProGresS-,
kopilier mal dein Programm mit dem Compiler-Flag -Wall,
dann siehst, du eine Warnung.warning: control reaches end of non-void function [-Wreturn-type]
Du solltest dich schon entscheiden, ob du ein Ergebnis zurückliefern möchtest oder in der Funktion die Ausgabe machst.
Kurze Erläuterung, warum du wahrscheinlich einen Segmentation-fault kriegst:
Das Objekt, was du zurückliefert, liegt auf dem Stack und dort stehen nun irgendwelche 'zufälligen' Daten und im String ist intern ein Zeiger auf chars.
Da wird jetzt irgendeinwert stehen, der als Speicheradresse interpretiert wird und diese gehört nicht zu deinem Programm.Falls du englische Antworten bevorzugst, lass es uns wissen...
Gruß,
XSpille
-
Zudem mache ich dich mal darauf aufmerksam, dass du eine unnötige Kopie beim Funktionsaufruf erzeugst.
Benutze statt
string qwer (string pName)folgende Signatur:
string qwer (const string& pName)Das &-Zeichen steht für Referenz, falls du damit nichts anfangen kannst und mal goolen willst.
-
Ich mache dich lieber mal darauf aufmerksam, dass du vielleicht mal in das C++ Buch deiner Wahl gucken solltest, um die richtige Syntax zu benutzen. Ich erwarte schon, dass man eine for-Schleife syntaktisch richtig hinbekommt, so schwierig ist das nicht.
Mein Compiler weigert sich jedenfalls
for( int a = 1; a >=100; a ++1 ) { }zu übersetzen.
Und die Beschreibung "geht nicht, immer noch die selben Fehler" ist ziemlich mager, zumal du nie beschrieben hast, welche Fehler überhaupt auftreten (Fehler des Compilers oder Laufzeitfehler).Edit:
Code an Original angepasst
-
Also bei mir kommt volgendes Fellers:
bla.cpp: In Funktion »std::string qwer(const string&)«:
bla.cpp:10:32: Fehler: expected »)« before numeric constant
bla.cpp:10:33: Fehler: expected »;« before »)« token
bla.cpp:17:33: Fehler: expected »)« before numeric constant
bla.cpp:17:34: Fehler: expected »;« before »)« tokenkann vieleicht ein Bitte mein Feller an Beispiel zeigen ?
Weil leider ich bis jetzt immer noch nicht verstanden habe wo ran es bei mir eigt.Ich habe eine Buch wo es eigendlich ganz gut beschrieben ist , nur wenn ich was lehrnen will versuche ich damit was anderes zu aufbauen und es entstehen immer Problemme. Aber dann weiß ich zumindest das ich da noch was verpast habe.
hir ist mein erste for schlefe :#include<iostream> #include<string> using namespace std; int main() { for (int a = 1; a >= 10; a += 2) { for (int b = 1; b >= 10; ++b) { cout << a << "|" << b << endl; } } return 0; }
-
Dein geposteter Code ist syntaktisch fehlerfrei.
Der Vergleichsoperator ist jedoch nicht der, den du haben möchtest.Die Fehlermeldung sieht mir etwas aus als ob du noch ein
a++1oder Ähnliches in deiner for-Schleife hast.
Du möchtest
++aoder
a++oder
a+=1oder
a=a+1Ich bevorzuge Schreibweise 1
Bei einem int macht es keinen Unterschied.
Bei anderen (komplexen) Datentypen braucht ++a im Gegensatz zu a++ keine Kopie zu erzeugen.
-
Danke sehr für ihre Hilfe.
Jetzt geht alles
