Strings speicher?
-
Hallo!
Wie kann ich in wert, "wert && "+" && i" speichern so dass ich es mit cout ausgeben kann? (so wie in vb hauts jedenfalls net hin
)int sum, i, zahl1, zahl2; char wert; int summe(int x, int y) { sum = 0; i = 0; wert = 0; for(i=x;i<=y;i++) { if(i%2 == 0) wert = wert && "+" && i; sum+=i; } return wert; return sum; }
-
So ein Unsinn klappt in Visual Basic??

Als erstes solltest du dir Gedanken machen über die beiden "Return", alternativ verwendest du einfach Referenzen:void foo( int x, int y, int &wert, int &summe ) { // ... }Damit kannst du dir auch die globalen Variablen sparen.
wert = wert && "+" && i;Hier weiß ich leider nicht was du genau tuen willst. Wenn das der String sein soll den du speichern willst musst du noch etwas Konvertieren.
grüße
-
David_pb schrieb:
So ein Unsinn klappt in Visual Basic??

Was fürn Unsinn? Es war Stringkontatenation gemeint und die klappt in VB genauso wie in C++ (oder umgekehrt ...).
@Diego: Wieso deklarierst Du 'wert' als 'char'? Deklarier's als 'std::string'. Und das Zusammenketten geht über den '+'-Operator. Allerdings hast Du dann das Problem, dass Du die numerischen Werte noch in Strings schreiben musst. Daher wäre es am besten, gleich einen Stringstream zu verwenden:
std::stringstream wert; wert << 0; // ... in der Schleife: wert << '+' << i;Das mit den zwei Rückgabewerten ist natürlich Quatsch.
-
Danke, bin aber leider totaler Anfänger in C++
das klappt leider so nicht
Wenn ich als x zb:1 eingebe und als y zb:9
dann soll folgente ausgaben kommen: 2 Plus 4 Plus 6 Plus 8 = 20 (bzw + 2 + 4 + 6 + 8 = 20)
Das Rechnen selbst und die Ausgabe der Lösung klappt ja schon, aber die "Rechenschritte" hin schreiben nicht.int sum, i, zahl1, zahl2; std::stringstream wert; int summe(int x, int y) { sum = 0; i = 0; wert << 0; for(i=x;i<=y;i++) { if(i%2 == 0) //wert = wert && "Plus" && i; wert << '+' << i; sum+=i; } // return wert; return sum; }In VB würd das so aussehen (vereinfachte Version):
[/code]
For i = in_Zahl To aus_Zahl
If (i Mod 2) = 0 Then
s_Anzeige = s_Anzeige & "+" & i
sUmme = sUmme + i
End If
Next i
MsgBox (s_Anzeige & " = " & sUmme)
[code]
-
diego2k schrieb:
In VB würd das so aussehen (vereinfachte Version):
[/code]
For i = in_Zahl To aus_Zahl
If (i Mod 2) = 0 Then
s_Anzeige = s_Anzeige & "+" & i
sUmme = sUmme + i
End If
Next i
MsgBox (s_Anzeige & " = " & sUmme)
[code]Genau, und Deinem C++-Code fehlt gewissermaßen das 'End If'. verwende geschweifte Klammern:
for(i=x;i<=y;i++) { if(i%2 == 0) { wert << '+' << i; sum+=i; } }
-
@Konrad Rudolph:
Ich habe mit dem Unsinn u.a. die zwei "Return" gemeint...
-
Danke für eure Hilfe, aber ich muss euch nochmal damit belästigen -.-
Weil es will einfach nicht klappen, wenn man "wert" nicht ausgibt startet das Programm, ich glaub er will das irgendwie in int umwandeln?#include <iostream> #include <sstream> using namespace std; std::stringstream wert; int sum, i, zahl1, zahl2; int summe(int x, int y) { wert << 0; sum = 0; i = 0; for(i=x;i<=y;i++) { if(i%2 == 0) { sum+=i; wert << "+" << i; } } return sum, wert; } int main() { cout << "zahl eins eingeben: "; cin >> zahl1; cout << "zahl zwei eingebne: "; cin >> zahl2; summe(zahl1,zahl2); cout << wert << "= " << sum << endl; }
-
Erstmal ist das sehr fragwürdiger Programmierstil, was du da zusammenbastelst (C++ unterstützt auch lokale Variablen ;)).
Zweitens ist es immer noch nicht möglich, zwei Werte zurückzugeben (außer du fasst sie zu einem struct zusammen).
Und drittens kann eine Funktion, die als "int summe(...);" deklariert ist, keinen stringstream zurückgeben.
-
Danke für eure Hilfe
habs so gelöst:int summe(int x, int y) { sum = 0; i = 0; for(i=x;i<=y;i++) { if(i%2==0 && i>x+1) cout << "+"; if(i%2==0) cout << i; if(i%2==0) sum+=i; } return sum; }
-
So, jetzt solltest du noch deine Variablen lokal deklarieren (merke: Es ist sehr schlecht und fehleranfällig, mit globalen Objekten zu arbeiten - weil du nie weißt, wer sie noch verwenden könnte). Außerdem kannst du hinter einem if() auch mehrere Anweisungen einfügen (in {} eingeschlossen):
int summe(int x, int y) { int sum = 0; for(int i=x;i<=y;i++) { if(i%2==0) { cout << (i>x+1) ? "+" : "" << i; sum+=i; } } return sum; }wobei ich mir noch überlegen würde, ob ich die Ausgabe in die Berechnungsfunktion verlagern würde. Wenn du unbedingt die Liste der summierten Zahlen brauchst, gib der Funktion einen zusätzlichen vector<int>& mit, in den sie alle Zahlen reinsammelt (dann kann das Hauptprogramm entscheiden, ob es die Werte ausgeben, miteinander multiplizieren oder auf Festplatte speichern will).