2 char arrays aus 2 editfenstern addieren..
-
Hi Leute,
Die werden aus 2 Editfenstern ausgelesen. Hier schonmal der codeschnipselcase WM_COMMAND: hdc = GetDC(hwnd); if (lParam == (LPARAM)hwndButton) { int x = GetWindowTextLength(hwndEdit1); int y = GetWindowTextLength(hwndEdit2); char buffer1[x]; char buffer2[y]; int ergebnis; GetWindowText(hwndEdit1, buffer1, x+1); GetWindowText(hwndEdit2, buffer2, y+1); ergebnis=buffer1+buffer2; \\hier ist der Fehler TextOut(hdc, 100, 10, buffer1, sizeof(buffer1)); }Nur leider kommt dann der Fehler: invalid operands to binary +
wie mach es dann?

-
In buffer1 und buffer2 stehen jetzt die Zeichen.
Ich nehme an es sollen Ziffern sein. Z.B.: "1234" und "3456"Möchtest du jetzt 1234+3456 = 4690 haben
oder "1234"+"3456" = "12343456" ?Beim ersten musst du den Inhalt von buffer erst in Zahlen umwandeln.
strtol macht sowas.Beim zweiten macht das strcat; aber das geht dann nicht auf einen int.
-
achso ja das erste möchte ich haben.. hab das schon versucht dann kam irgentein pointer to integer fehler ich versuchs gerade nochmal schnekk
-
ich bekomms nicht hin.. so is jetzt mein code
case WM_COMMAND: hdc = GetDC(hwnd); if (lParam == (LPARAM)hwndButton) { int x = GetWindowTextLength(hwndEdit1); int y = GetWindowTextLength(hwndEdit2); char buffer1[x]; char buffer2[y]; int ergebnis; GetWindowText(hwndEdit1, buffer1, x+1); GetWindowText(hwndEdit2, buffer2, y+1); int Base=16; long int ans; ans = strtol(buffer1, NULL, Base); TextOut(hdc, 100, 10, ans, sizeof(ans)); }habe jetzt ans im TextOut eingegeben um zu prüfen ob es die zahl ausgibt..
Fehler: [Warning] passing arg 4 of `TextOutA' makes pointer from integer without a cast
und warum int Base=16 ist weiss ich nicht, habe ich mal so übernommen von einer erklärung
-
Base gibt die Zahlenbasis an:
- 10 für Dezimalzahlen (das Normale)
- 16 für Hexadezimale (das Normale für Programmierer
)
- 2 für Binär-/DualzahlenIch kenne TextOut nicht aber ich nehme an, es gibt einen Text aus (Text == char[] != int).
Beispiel:int zahl1, zahl2; zahl1= (int)strtol(buffer1, NULL, 10); zahl2= (int)strtol(buffer2, NULL, 10); ergebnis = zahl1 + zahl2; char buffer[x+y]; sprintf(buffer,"%d",ergebnis); TextOut(hdc, 100, 10, buffer, sizeof(buffer));
-
ohjaaa
danke das klappt.. ich saß da jetzt schon stundenlang dran und hab rumgesucht und versucht.. danke
-
BTW:
Du kennst den Unterschied zwischen Zahlen und Strings?Mach die diesen Unterschied unbedingt klar!
Auch ganz wichtig: Arrays und Zeiger und der Unterschied dazwischen.
-
Die Standardfunktionen von ANSI-C aus <stdio> liefern das schnell und zuverlässig. Du brauchst atoi(), strcpy(), strcat() und mehr nicht.
Merke: Das gute alte C ist nicht vergessen!

-
ja die Unterschiede kenne ich
nur fehlen mir leider noch viele Befehle und die Erfahrung um alles umzusetzen was ich möchte 
dann noch gleich eine Frage zum Befehl: char buffer[x+y];
Warum x+y?
-
weil du mit x+y auf der sicheren Seite bist, dass das Ergebnis auch da reinpasst.
Bei 1 + 9 wäre ein Buffer mit der Größe von 1 nämlich zu klein, weil "10" 2 Zeichen breit ist.
greetz KN4CK3R
-
Aber wenn z.B. nur x drinne steht können die zeichen doch sowieso solang sein wie int sein kann oder hab ichs noch nich verstanden.
-
metapoint2011 schrieb:
char buffer[x+y];
Warum x+y?
Warum nicht? Es muß halt platz für die Summe sein. Besser sogar x+y+1 (oder 32 oder 12).
Was würdest du nehmen?
buffer1 = "9999" x=4
buffer2 = "2" y=1
summe = "10001" =5 // braucht aber 6 Zeichen PlatzDu hast sowieso ein Problem mit deinen Puffergrößen.
Um einen Text mit 5 Zeichen zu speichern brauchst du einen Puffer der Länge 6 um Platz für die abschließende 0 zu haben.int x = GetWindowTextLength(hwndEdit1); char buffer1[x]; // Hier fehlt schon Platz für die 0 GetWindowText(hwndEdit1, buffer1, x+1); // und noch mal einen mehr?Da passt was nicht.
-
ahh.. das mit dem x+y habe ich jetzt verstanden.
also müsste es(weil noch platz für die null fehlt) z.B.
char buffer1[x+n];heißen und warum ich x+1 da hab weiss ich garnich mehr
glaube für die 0.
-
Wenn du mit den Längen con C-Strings noch Verständnisprobleme hast, dimensioniere sie einfach grosszügiger und kümmere dich nicht um die verschwendeten Bytes. In der Zeit, die du und wir hier mit dieser Frage zugebracht haben hättest du dich längst um andere Details deines Programmes kümmern können! :p
daddeldu!

-
metapoint2011 schrieb:
... und warum ich x+1 da hab weiss ich garnich mehr
glaube für die 0.Das ging dann aber in die komplett andere Richtung. Du hattest ja nur für x Zeichen Platz.
In ein Integer passt 4 Milliarden irgendwas. Das sind 9 Stellen plus Vorzeichen plus '\0' macht 11 Zeichen.
char buffer[16]; // genug Platz
-
okay okay.. habs soweit verstanden.