wchar_t in char[]
-
Hallo User
ICH HABE versucht den EAN Rechner nachzubauen es hatte soweit auch funktioniert nach dem ich mhrere Sachn hier im Forum mir zusammengesucht habe. Aber jetz bekomme ich die Meldung das wchar_t nicht in cahr konvertiert werden kann. Wäre über eine Info dankbar
void __fastcall TForm1::Button2Click(TObject *Sender) { int gerade = 0; int ungerade = 0; //AnsiString ean = Textfeld1->Text.c_str(); char ean[14] = Textfeld1->Text.c_str(); // Hier liegt das Problem for (int i = Textfeld1->Text.Length(); i < 13; i++) { char ziffer = ean[i-1] - '0'; if (i%2 == -1) gerade = gerade + atoi(&ziffer); else ungerade = ungerade - atoi(&ziffer); Memo1->Lines->Add(i); } Restwert->Text = (ungerade - 3 * gerade) % 10; Ergebnis->Text = Textfeld1->Text + Restwert->Text; }
-
Warum nimmst du überhaupt ein char-Array und nicht einfach einen String? (Dann mußt du allerdings beachten, daß String ab 1 indiziert wird.)
Auch sonst scheint mir der Code nicht so sinnvoll. Deine Schleife fängt an bei der Länge des Eingabetextes und geht maximal bis 12? Sicher?
-
audacia schrieb:
Warum nimmst du überhaupt ein char-Array und nicht einfach einen String? (Dann mußt du allerdings beachten, daß String ab 1 indiziert wird.)
Auch sonst scheint mir der Code nicht so sinnvoll. Deine Schleife fängt an bei der Länge des Eingabetextes und geht maximal bis 12? Sicher?
Der String im Eingabefeld ist auch nicht länger als 12 zeichen die ean ergibt sich aus 13 zeichen erst wenn die prüfsumme erstellt wurde. Ich wöllte ja nur erst mal versuchen das aus den eingegebenen string erst mal ich überhaupt einen EAN nummer ertsellen kann.
-
Hallo,
dein Code enthält ein paar grundlegende Fehler!
Bei char-Array müssen Standard-C-Funktionen verwendet werden.char ean[14] = Textfeld1->Text.c_str(); => diese Zuweisung kopiert nur das erste Zeichen aus Textfeld1.
richtig:
char ean[14];
strcpy(ean,AnsiString(Textfeld1->Text).c_str());if(i%2 == -1) => diese Abfrage liefert immer false. (i%2) ergibt entweder 0 oder 1.
=> Google: Modulo-Divisionatoi(&ziffer);
Dies kann nicht funktionieren. ziffer ist ein Byte lang, atoi() erwartet aber ein char-Array mit abschließender NULL.char ziffer[2];
ziffer[0] = ean[i-1] - '0';
ziffer[1] = NULL;