Integer einlesen (aus EditBox)



  • Das ist die Unix-Variante 😉
    statt snprintf sprintf bzw. wsprintf



  • sprintf funktioniert net, da steht dann das es die net gibt



  • #include <stdio.h>
    

    ?!



  • jo aber der aufruf funktioniert dann nicht:

    int zahl;
    char Text[20];
    
    sprintf(Text, 20, "%i", zahl);
    

    compiler haut dann fehlermeldung raus



  • Soll er ja auch, schließlich übergibst du einen falschen Parameter.

    http://msdn2.microsoft.com/en-us/library/ybk95axf(VS.80).aspx

    👎



  • inwiefern hilft das dann meinem problem?


  • Mod

    chili (gast) schrieb:

    inwiefern hilft das dann meinem problem?

    In dieser Beschreibung steht drin, warum sprintf evtl. nicht verfügbar ist une welche Funktione sicher sind un verwendet werden sollten...

    Lesen!



  • jaja das ist mir klar, nur ich möchte einfach eine gscheite erklärung bzw. antwort auf meinen 1 post, da diese funktion anscheinend nicht (so wie ich es brauch) funktioniert löst das mein problem nicht


  • Mod

    Black Shadow hat Dir die Anwtort sofort gegeben! GetDlgItemInt macht genau das, was Du möchtest! Bei allem was danach kam, ging es um die Umwandlung eines Ints in einen String. Aber das macht auch SetDlgItemInt in einem Rutsch.

    Bzgl ein Number Only Edit Control, schau Dir bitte ES_NUMBER an.

    Du möchtest gescheite Antworten? Dann lies bitte was man Dir schreibt! 🕶



  • sry wenn ich vorher bisschen unfreundlich war aber war ziemlich verwirrt, bin halt nicht so ein pro. hab jetzt nur noch eine frage und ich hoffe das wer eine antwort schreiben kann die alle fragen beseitigt xD

    also, ich habe jetzt 2 Number Only editboxen, aus denen ich per GetDlgItemInt() den wert auslese und speichere, dann rechne ich mit diesen zahlen und möcht das ergebnis dann wieder ausgeben und zwar durch SetWindowText(), diese Funktion übernimmt aber nut LPCSTR (wobei ich net weis was das ist^^) bzw. char arrays. jetzt, wie mache ich, dass ich mein ergebnis (ausgerechnet mit den eingegebenen zahlen) ausgebe bzw an diese Funktion übergebe? bzw in was muss ichs casten?
    ich weis echt nicht mehr weiter...

    lg chili



  • Liest du die Antworten in deinem eigenen Thread nicht? Es wurde sprintf in allen Variationen genannt. Außerdem hat Martin Richter dir eine noch komfortablere und einfachere Lösung genannt: SetDlgItemInt



  • doch ich lese die antworten, aber egal ich zeig euch mein prob:

    ich habe also 2 number only editboxen aus denen die 2 zahlen ausgelesen werden:

    int Number1, Number2, Result;
    
    	GetDlgItemInt(hEDITBOX, Number1, NULL, NULL);
    	GetDlgItemInt(hEDITBOX2, Number2, NULL, NULL);
    

    soweit kein problem, dann rechne ich mit ihnen und int Result wird einen Wert zugewiesen.
    Zusätzlich habe ich noch einen Static TExt, den ich jetzt ändern möchte nämlich in den wert von Result
    so geht es aber nicht:

    SetWindowText(hTEXT, Result); //hText = handle auf meinen static text
    

    is ja klar weil int != LPCSTR

    gut aber wenn ich das jetzt so caste:

    char Text[20];
    sprintf(Text, ""%i", Result);
    

    und dann den TExt so ändern will:

    SetWindowText(hTEXT, Text);
    

    kommt nur ein schwachsin und wirrwarr von zeichen heraus. das ist alles was ich bis jetzt aus diesem thread gelernt hab und bis jetzt weis ich noch immer nicht wie ich das ergebnis ausgeb!
    es wäre wirklich nett wenn jemand einfach einen beispiel code schreiben könnt mit dem er einfach int Result umwandelt und dann mit einer Funktion (besten mit SetWindowText()) ausgibt!

    sry das ich das nicht kann -.-


  • Mod

    Mit Set/GetDlgItemInt gibt man nicht das Handle der Edit-Controls an sondern das Handle des Parent Fensters und die IDs der Edit Controls!

    Hast DU schon mal probiert über der Funktion GetDlgItemInt die F1 Taste zu drücken und zu lesen was die Doku sagt.
    Wie Du die Argumente verwendest kann es nicht hinhauen.

    %i gibt es als Maske in sprintf nicht. Auch darauf hat Dich bereits tenchou hingewiesen indem er Dir einen Link auf die Doku gesendet hat. Korrekt wäre %d!

    Ich muss also davon ausgehen, dass Du in keiner Weise liest was man Dir anbietet!



  • vorne weg, wäre es nicht möglich mir einfach schnell einen beispiel code zu schreiben, anstatt mir dauernd zu sagen wo ich nachschaun soll? ich code seit 3 monaten c++, davon seit 2 tagen mir WinApi, wenn ich sowas lies:

    http://msdn2.microsoft.com/en-us/library/aa925758.aspx

    hilft mir das eher wenig, auser das ich grad weis wozu die parameter gut sind.
    wenn ich sprintf nachschau kommt das:

    http://msdn2.microsoft.com/en-us/library/ybk95axf(VS.80).aspx

    was mir auch wirklich extrem hilft. ich habe "%i" geschrieben weil es mir in dem 2 post in diesem thread so gemacht wurde und ich es übernommen habe, wie gesagt ich kannte die funktion vorher noch nicht.
    ich weiß schon das ihr mir jetzt wahrscheinlich sagen werdets, dass wenn ihr mir einen fertigen code hinklatscht das ich dann davon nichts lerne, aber das ist ja wohl nicht euer problem oder? btw. warum macht ihr euch die arbeit mir extra einen MSDN eintrag rauszusuchen, wenn ihr mir doch einfach eine lösung schreiben hättets könne, dann hätten wir nicht diskutieren müssen oder sonstiges. ich habe schon alles mögliche abgesucht, immerhin habe ich mich bevor ich diesen thread aufgemacht habe schon ca. einen Tag mit dem Problem beschäftigt, in der MSDN gesucht, im internet tutorials angeschaut die mir aber alle nicht wirklich weiterhelfen.

    ich möchte auf keinen Fall unhöflich erscheinen und ich schätze auch eure antworten, doch kann ich nichts machen wenn ich daraus nicht schlau werde. und beiträge die mir dann erklären das es oben eh schon steht, und ich soll da und dort nachschaun helfen mir garnicht. ihr habe jede funktion die ihr angeführt wurde in der MSDN nachgeschlagen aber es hilft mir nichts, da oft nur die Parameter erklärt werden und der Rückgabe wert erklärt wird.
    Es wäre schön wenn ihr mir einfach zeigt wie es geht durch ein beispiel, dann hättet ihr auch statt 5 nur 1 beitrag schreiben müssen. ich entschuldige mich das ich manches nicht verstehe, auch wenn es für euch klar erscheint.



  • Da sind doch sogar Beipsiele auf der MSDN Seite unten mit drauf. So hier:

    // crt_sprintf_s.c
    // This program uses sprintf_s to format various
    // data and place them in the string named buffer.
    //
    
    #include <stdio.h>
    
    int main( void )
    {
       char  buffer[200], s[] = "computer", c = 'l';
       int   i = 35, j;
       float fp = 1.7320534f;
    
       // Format and print various data: 
       j  = sprintf_s( buffer, 200,     "   String:    %s\n", s );
       j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
       j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
       j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );
    
       printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
    }
    

    Was ist denn jetzt noch unklar? Mehr helfen kann ich dir auch nicht mehr. Bei aller Freundlichkeit, aber wenn dir die bisherigen Ratschläge in diesem Thread alle nicht weiterhelfen, musst du dich vielleicht noch etwas eingehender mit den Grundlagen befassen...oder dir einfach mal die Zeit nehmen und die MSDN Links richtig durcharbeiten.



  • danke für die antwort, doch diesen code habe ich ja in der MSDN schon gelesen. also nachdem was ich daraus erkenne, nütze ich diese Funktion auf mein Beispiel bezogen so:

    int Number1, Number2, Result;
    char chResult[20];
    
    //die Zahlen aus den ES_NUMBER editboxen auslesen
    
    GetDlgItemInt(hEDITBOX, Number1, NULL, NULL);
    GetDlgItemInt(hEDITBOX2, Number2, NULL, NULL);
    
    //Rechnen:
    
    Result = Number1 + Number2;
    
    //Ergebnis in chResult schreiben und per SetWindowText ausgeben
    
    sprintf_s(chResult, 20, "%d", Result);
    
    //Ergebnis ausgeben
    
    SetWindowText(hTEXT, chResult); //hTEXT, handle auf meinen Text
    

    so, soweit bin ich gekommen durch diesen MSDN code. aber dann gibt es mir als ausgabe nur das an:

    -1717986920

    egal welche zahlen ich eingeb.


  • Mod

    chili (gast) schrieb:

    vorne weg, wäre es nicht möglich mir einfach schnell einen beispiel code zu schreiben, anstatt mir dauernd zu sagen wo ich nachschaun soll? ich code seit 3 monaten c++, davon seit 2 tagen mir WinApi, wenn ich sowas lies:

    http://msdn2.microsoft.com/en-us/library/aa925758.aspx

    hilft mir das eher wenig, auser das ich grad weis wozu die parameter gut sind.

    Dann lies doch für was die Parameter gut sind. Außerdem habe ich dasin meinem Posting schon moniert was Du falsch machst.

    1. Parameter: Handle des Parent Fensters
    2. Parameter: ID des Edit Controls.
    3. Parameter: Lass es einfachmal bei NULL ansonsten lesen
    4. Parameter: TRUE oder FALSE, je nachdem ob Du signed oder unsigned erlaubst

    Und was machst Du?

    int Number1, Number2, Result;
    char chResult[20];
    
    //die Zahlen aus den ES_NUMBER editboxen auslesen
    
    GetDlgItemInt(hEDITBOX, Number1, NULL, NULL);
    

    Der zweite Parameter ist eindeutiger Quatsch...
    Auf jeden Fall liest Du nicht! 👎
    Wenn Du aus dem geschriebenen nicht klar kommst kann ich Dir auch nicht weiter helfen...



  • aha sehr interessant. aber inwiefern hilft mir diese Funktion dann einen int wert auszulesen?
    also gehen wirs nochmal durch,

    1. Parameter: handle auf meine Editbox (oder auf das Hauptfenster? ka, ich versteh nicht ganz was da steht..)

    2.Parameter: ID meiner Editbox (ok, sry das hab ich nicht gesehen)

    3.Parameter: Null

    4.Parameter: FALSE wenn ich keine unsigned haben möchte.

    return value: gibt mir das was ich möchte zurück, oder wenn es falshc war eine 0.

    gut, aber es geht noch immer nicht wenn ich angeb:

    Number1 = GetDlgItemInt(hWnd, ID_EDITBOX, NULL, FALSE)
    

    dann kommt wie gesagt immer nur diese eine negative Zahl heraus


  • Mod

    1. Parameter: Das Handle des Parent Fensters!

    Der Rückgabewert ist nur dann als korrekt anzusehen, wenn der Wert auf den lpTranslated (3.Parameter) zeigt TRUE ist. Da Du aber den dritten Parameter ignorierst weißt Du nicht ob ein Fehler passiert ist.

    Ansonsten steht auch in der Anleitung dass für erweitterte Fehlerinfos GetLastError verwendet werden kann.

    Wer lesen kann ist klar im Vorteil...


Anmelden zum Antworten