Verbuggter VC++ 6.0 Compiler
-
Ne daran liegts nicht. aber nachdem du diesen charbuffer nicht mehr brauchst musst du ihn freigeben.
-
was, wenn ich es nicht tue? Verschwende ich dann nur 3kb Arbeitsspeicher, oder wirkt sich das auf das ganze programm aus?
-
Wenn du die Variable danach nciht mehr benutzt, passiert glaub nix, aber wenn du sie wieder benutzt, könnte es sein, dass was passiert, weiss grad nimmer, was das war

-
nee, also ich denke das ist es nicht. Habe jetzt den Release Buffer angewandt, gab aber keine besserung. Was mich so verwundert ist, dass zeichen [1] immer als 0 also als "" string gewertet wird. Ich verstehe einfach nicht warum. Das ist auch nur bei einer Großen zeichenfolge der fall. Was könnte das sein

-
Es wäre wahrscheinlich ganz gut, wenn du mal ein konkretes, nicht funktionierendes Codebeispiel zeigen könntest. Bei mir klappt das alles prima.
Wo nimmst du eigentlich IntToStr her?
-
also, ich hätte den switch so gemacht:
iGesamt += iCode * ((iStelle%2) ? 1 : 3);
-
MFK schrieb:
Es wäre wahrscheinlich ganz gut, wenn du mal ein konkretes, nicht funktionierendes Codebeispiel zeigen könntest.
Kannst du haben:
{ CString strChecksum="123456789012345678901234"; char* cChecksum = strChecksum.GetBuffer(24); int iChecksum=0; int iGesamt=0; for(int iStelle=0;iStelle <24;iStelle++) { strChecksum = cChecksum[iStelle]; iChecksum = StrToInt(strChecksum); switch (iStelle) { case 0: iGesamt += iChecksum * 3; break; case 1: iGesamt += iChecksum * 1; break; case 2: iGesamt += iChecksum * 3; break; case 3: iGesamt += iChecksum * 1; break; case 4: iGesamt += iChecksum * 3; break; case 5: iGesamt += iChecksum * 1; break; case 6: iGesamt += iChecksum * 3; break; case 7: iGesamt += iChecksum * 1; break; case 8: iGesamt += iChecksum * 3; break; case 9: iGesamt += iChecksum * 1; break; case 10: iGesamt += iChecksum * 3; break; case 11: iGesamt += iChecksum * 1; break; case 12: iGesamt += iChecksum * 3; break; case 13: iGesamt += iChecksum * 1; break; case 14: iGesamt += iChecksum * 3; break; case 15: iGesamt += iChecksum * 1; break; case 16: iGesamt += iChecksum * 3; break; case 17: iGesamt += iChecksum * 1; break; case 18: iGesamt += iChecksum * 3; break; case 19: iGesamt += iChecksum * 1; break; case 20: iGesamt += iChecksum * 3; break; case 21: iGesamt += iChecksum * 1; break; case 22: iGesamt += iChecksum * 3; break; case 23: iGesamt += iChecksum * 1; break; } } strChecksum=cChecksum; return strChecksum+=IntToStr(iGesamt%10); strChecksum.ReleaseBuffer(); }Wo nimmst du eigentlich IntToStr her?
IntToStr ist eine von mir selbst geschriebene und includierte Funktion, die eine Integer Zahl in einen CString umwandelt.
-
ähh, int2string isse nicht notwending, da die klasse CString bereits eine Methode namens Format für solch sachen zur verfügung stellt.
@bbb - Sehr gute lösung, mit dem kann man das ganze switch einsparen !!!!
-
Hinweis:
Das return erfolgt VOR dem Release von deinem CString-Object !
-
Huhu !
Boah ey, was ist wenn Du ne 100-Stellige Zahl prüfen willst ?
Oder wenn Du die Anzahl der Stellen vorher gar nicht kennst ?Hier ein Vorschlag:
CString strZahl = "3456789012098";
int iSumme=0;for(int i = 0; i < strZahl.GetLength(); i++)
{
// wenn der Index einer Zahl gerade ist, also durch 2 ohne Rest teilbar,
// dann wird diese Zahl mit 3 multipliziert, sonst mit 1
if( i % 2 == 0 ) iSumme += (strZahl.GetAt(i) - '0') * 3 ;
// Multiplikation mit 1 kann man sich natürlich schenken
else iSumme += (strZahl.GetAt(i) - '0');
}// Berechnung der Prüfziffer
int iPruefZiffer;int iRest = iSumme % 10;
if( iRest == 0) iPruefZiffer = 0;
else iPruefZiffer = 10 - iRest;// Ausgabe zur Kontrolle
CString strMsg;
strMsg.Format("Prüfziffer: %i", iPruefZiffer);
AfxMessageBox(strMsg);Gruß, Joe
-
{ CString strChecksum="123456789012345678901234"; char* cChecksum = strChecksum.GetBuffer(24); int iChecksum=0; int iGesamt=0; for(int iStelle=0;iStelle <24;iStelle++) { strChecksum = cChecksum[iStelle]; // hier ist das ProblemAn der kommentierten Stelle weist du strChecksum neu zu. Das ist dieselbe CString-Instanz, deren Inhalt du oben mit GetBuffer geholt hast. Die Folge ist, dass sich der Inhalt von cChecksum ändert.
Dein erstes Beispiel hatte dieses Problem nicht - da waren es zwei CStrings: Code und strCode.
Also: Nicht immer gleich auf den Compiler schimpfen.

-
Ahh danke, hattest recht!
Wollte ne variable sparen :p
Nu funktionierts endlich!
