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-Division

    atoi(&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;


Anmelden zum Antworten