Proßzeß beenden und Zeit messen



  • irgendwie habe ich den code nicht verstanden.
    Bei einer falschen Eingabe von var soll er z.b. abbrechen.

    vor dem main habe ich dies vereinbart;

    void rassert_impl(int condition, char * conditionText, char * msg, char * file, int line);

    #define RAssert(cond) rassert_impl((cond), #cond, NULL, __FILE__, __LINE__)
    #define RAssertE(cond, msg) rassert_impl((cond), #cond, (msg), __FILE__, __LINE__)

    Im Hauptprogramm folgt dann:

    printf("Eingabe Wert:");
    scanf("%i",&var);
    RAssert(var!= NULL);

    es passiert aber nichts. Wie kann ich die Fkt. rassert_impl sinnvoll aufrufen.
    Verstehe das mit dem define nich*g*.
    Gruß m.



  • Naja, der Quellcode ist unter vorbehalt von Fehlern 😉

    Hast du mal mit dem Debugger nachvollzogen, was passiert?? ist var wirklich == 0? usw.



  • also ich möchte es jetzt mit #error machen.

    #if var==0 //beliebige Bedingung
    #error fehlermeldung
    #endif

    int var;

    void main(){
    printf("Eingabe Wert:");
    scanf("%i",&var);}

    anscheinend habe ich das mit den Makros noch nicht verstanden. Wie erreiche ich mit #error, das wenn var 0 eingegeben wird, der Präprozessor abbricht und entsprechend fehlermeldung ausgibt.



  • anscheinend habe ich das mit den Makros noch nicht verstanden

    richtig 😉

    Der Präprozessor läuft vor der eigentlichen Kompilierung, und erlaubt mehr oder weniger nur textersatz und das ein/ausblenden von bestimmten textabschnitten.

    der Wert von val ist ja aber erst zur Laufzeit bekannt.

    Gib doch vor dem RAssert mal den Wert von val und von 'val!=NULL' aus.



  • Hier ist mal der ganze Quelltext,
    a)Fehlermeldung : exit nicht deklarierter Bezeichner. warum?
    b) könntest du mal ein beispiel angeben, wo einfach nur eine Eingabe überprüft wird?

    #include<iostream.h>
    #include<stdio.h>

    #define RAssert(cond) rassert_impl((cond), #cond, NULL, __FILE__, __LINE__)
    #define RAssertE(cond, msg) rassert_impl((cond), #cond, (msg), __FILE__, __LINE__)

    void rassert_impl(int condition, char * conditionText, char * msg, char * file, int line);

    int var;

    void main(){
    printf("Wert:");
    scanf("%i \n",&var);

    RAssert(var!= NULL); };

    void rassert_impl(int condition, char * conditionText, char * msg, char * file, int line)
    {
    if (condition != 0)
    return;

    printf("ASSERT FAILED: [%s] at %s(%i) %s\n",
    conditionText ? conditionText : "",
    file ? file : "", line,
    msg ? msg : "");
    exit(-1); // terminate app
    }



  • exit nicht deklarierter Bezeichner. warum?

    #inclue <stdlib.h>

    steht in der MSDN 😉

    Ich würde ein Assert nicht für eine Eingabeüberprüfung verwenden (es sei denn, das teil ist strikt nur für mich)

    ansonsten war dein ursprünglicher code schon ok.



  • peterchen schrieb:

    ansonsten war dein ursprünglicher code schon ok.

    sicher? Was wenn der Benutzer "Alle lieben scanf" eingibt?`
    Ist dann die Eingabe = NULL ?

    [edit]
    fragen über fragen..
    was wenn der Benutzer -1 oder 0
    eingeben möchte? Auch dies wären gültige Int-Werte...
    [/edit]



  • sicher? Was wenn der Benutzer "Alle lieben scanf" eingibt

    IIRC ja.

    (Allerdings solltest du auf 0 vergleichen - NULL nimmt man eigentlich nur für NULL-Zeiger)

    ja was hättest du denn gern als "gültige" Werte?



  • peterchen schrieb:

    IIRC ja.
    (Allerdings solltest du auf 0 vergleichen - NULL nimmt man eigentlich nur für NULL-Zeiger)

    Den NULL-Irrtum habe ich absichtlich weggelassen.. sonst müsste man z.B.
    "void main" auch noch ankreiden u.s.w.....

    Und was das "!= 0" angeht... rate welcher Wert "var" hat, wenn der Anwender
    beim Code

    int var = 42; 
    scanf("%i \n",&var);
    

    z.B. "zeigwiescanffunzt" eingibt ....



  • Nö, ratespiele spiel ich nicht.. 😉

    Icmuß zugeben, hab scanf so nie benutzt. selber einlesen und umwandeln macht schlank 😉


Anmelden zum Antworten