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
#endifint 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 Codeint 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