Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

_sleep() in c

matthew76 / 20 Antworten / Baumansicht Nickles

guden,


Folgende Frage:


Ich will in C mit der _sleep() Funktion einen Text 5 sek ausgeben.


zB. wenn jmd. eine falsche Eingabe gemacht hat, kommt 5 Sek die Fehlermeldung "Eingabe Fehlerhaft"und verschwindet wieder.


Ich weiß das man dies mit der if() Funktion programmieren kann aber wie?


Das der Text nach 5 sek. erscheint habe ich hinnbekommen, aber dies war nicht mein Ziel. Ich weiß das es möglich ist, aber nicht wie.


Mein Versuch:


#include <stdio.h>


int main()


{


_sleep(5000);


printf("input incorrectly");


return 0;


}


 


Bitte um Rückantworten


Mit freundlichen Grüßen

bei Antwort benachrichtigen
mart_tram matthew76 „_sleep() in c“
Optionen

So in etwa???

//-------------code----------
int main()
{

char eingabe;

printf("Eingabe: ");
scanf("%s",eingabe)

if (eingabe == "E")
{
printf("input incorrectly");
_sleep(5000);
}
else
printf(" OK ! ");

}
//-------------code----------

mfg
mart

bei Antwort benachrichtigen
mart_tram Nachtrag zu: „So in etwa??? //-------------code---------- int main char eingabe printf...“
Optionen

//-------------code----------
int main()
{

char eingabe;

printf("Eingabe: ");
scanf("%s",eingabe)

if (eingabe == "E")
{
printf("input incorrectly");
_sleep(5000);
printf("\r"); // Hier müsste er das input incorrectly wieder löschen
}
else
printf(" OK ! ");

}
//-------------code----------

bei Antwort benachrichtigen
mart_tram matthew76 „_sleep() in c“
Optionen

axo seh gerade die nachricht soll ja wieder verschwinden...sorry...net gesehen...

bei Antwort benachrichtigen
Dreamforger matthew76 „_sleep() in c“
Optionen

...und nachdem es sich bei 'input' nicht um ein Verb handelt, gibts auch keinen Grund incorrect zu adverbialisieren.

input incorrect

wie gesagt, Haarspalterei.

Zur Korrektur:
Der Tag an dem

eingabe == "E"
wahr wird, ist der Tag an dem Schweine rückwärts fliegen :-)

Primitive Strings packen wir schön brav in char*, und nicht in char und legen mittels malloc speicher dafür an oder nehmen gleich ein fixes array char[LENGTH]. Und verglichen wird nicht mit == sondern mit strcmp. Sonst wirds nie was
bei Antwort benachrichtigen
mart_tram Dreamforger „Haarspalterei und Korrektur“
Optionen

ja sorry habe ich auch gerade gsehen *vor scham erröte*

bei Antwort benachrichtigen
mart_tram Dreamforger „Haarspalterei und Korrektur“
Optionen

sowas kommt halt davon wenn man ständig zwischen tür und angel hängt... trotzdem vielen dank :-) - funktioniert das wenigstens dann allet so?? *dummfrag*

bei Antwort benachrichtigen
matthew76 Nachtrag zu: „_sleep() in c“
Optionen

Schade das niemand weiß wie man das lösen kann.

Ich musste es nun etwas anders Programmieren, die neue Lösung schränk meine Möglichkeiten aber stark ein:

//code
#include

bei Antwort benachrichtigen
vergisses matthew76 „Schade das niemand weiß wie man das lösen kann. Ich musste es nun etwas anders...“
Optionen

Hallo matthew,

das können wir natürlich nicht auf uns sitzen lassen ;-)

Du mußt eine Terminal Emulation mit Escape Sequencen benutzen.
Abhängig vom Betriebsystem sieht die Lösung etwas unterschiedlich aus.

MS-DOS:
Du mußt Du den Treiber ANSI.SYS laden.
(device=ansi.sys) in der config.sys.
Danach kannst Du über entsprechende Escape Sequencen zum
Positionieren des Curses, Löschen von Zeilen, Buchstaben bzw.
Bildschirmbereichen verwenden.
Die Escape Sequencen werden mit einfachen printf´s ausgegeben.

UNIX:
Hier hast Du ohnehin eine Terminalemulation aktiv.
Welche, kannst Du z. B. über Abfragen der Environment
Variable $TERM erfahren.
Die einfache, aber nicht empfohlene Methode sieht so aus:
mit "infocmp" die Escape Sequencen anzeigen lassen (Sind Memnonics)
und wie bei DOS mit printf verwenden.

Besser: Programmieren mit der Curses Lib (man curses).
Tip: Die Curses Lib gibt es auch in diversen DOS Implementierungen.
Wenn Du etwas sorgfältig programmierst, sollte Dein Source Code
bei Verwendung von Curses sogar zwischen DOS und UNIX kompatibel sein.


Gruss, vergisses

bei Antwort benachrichtigen
matthew76 Nachtrag zu: „_sleep() in c“
Optionen

Danke ich werde es sofort ausprobieren!

bei Antwort benachrichtigen
vergisses matthew76 „_sleep() in c“
Optionen

Hallo matthew,

unter
http://www.evergreen.edu/biophysics/technotes/program/ansi_esc.htm
findest Du die wesentlichen Escape Sequencen aufgelistet.

Diesen Link habe ich übrigens hier bei Nickles unter
http://www.nickles.de/static_cache/537425234.html
gefunden ;-)

Gruss, vergisses

bei Antwort benachrichtigen
martinx24 matthew76 „_sleep() in c“
Optionen

Hallo Matthew!
Hier meine Lösung...

//Stand vom 15.10.2003 - Nickles-Sleep-Test

#include stdio.h //diese Zeile bitte noch korrigieren - Sonderzeichen
#include stdlib.h //diese Zeile bitte noch korrigieren - Sonderzeichen
#include string.h //diese Zeile bitte noch korrigieren - Sonderzeichen
#include time.h //diese Zeile bitte noch korrigieren - Sonderzeichen

char isteingabe[256];
char solleingabe[]="Hallo";
char meldung1[]="\nFALSCHE EINGABE!";
char meldung2[]="\nKORREKTE EINGABE!";
void sleep(int zeit); //Wartefunktion

int main(void)
{
while(1)
{
printf("Bitte geben Sie Ihre Eingabe ein!\n\n-->");
scanf("%s",&isteingabe);

if(strcmp(solleingabe,isteingabe)!=0)
{
printf("%s",meldung1);
sleep(3);

for (unsigned int i=0;i {
printf("\b");
}
//system("cls"); //als Alternative könnte auch der Bildschirm gelöscht werden...
}

else
{
break;
}
}

printf("%s",meldung2);
sleep(3);

return 0;
}

void sleep(int zeit) //Wartefunktion
{
clock_t goal;
goal=(zeit*CLOCKS_PER_SEC)+clock();
while(goal>clock())
;
}


Gruß
Martin!

bei Antwort benachrichtigen
martinx24 Nachtrag zu: „Hallo Matthew! Hier meine Lösung... //Stand vom 15.10.2003 - Nickles-Sleep-Test...“
Optionen

Hallo nochmal!
Frage: Woran liegt's genau, daß ich immer keine Sonderzeichen (siehe Quellcode) posten kann? (Was muß ich umstellen etc.)

Gruß Martin!

bei Antwort benachrichtigen
mr.escape martinx24 „Hallo nochmal! Frage: Woran liegt s genau, daß ich immer keine Sonderzeichen...“
Optionen

Die kleiner und grösser zeichen (< bzw. > auch spitze klammer genannt) umschliessen normalerweise tags. Um diese hier erscheinen zu lassen, muss man die öffnende spitze klammer (<) als "&lt;" im text angeben. Am besten direkt vor dem posten mit "search und replace" in einer kopie ersetzen.
Evtl. gibt es noch eine einfachere methode, aber so gehts auch.

mr.escape

ps.:ähnliches gilt beim "&" dort lautet der kode: &amp;

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
martinx24 mr.escape „Die kleiner und grösser zeichen bzw. auch spitze klammer genannt umschliessen...“
Optionen

Hallo Mr. Escape!
Danke für Deine Antwort - kennst Du auch noch die Formulierungen für
"Backspace und n" (neue Zeile) und "Backspace und b" (Rückschritt)?Falls ja, wo kann ich sowas selbst nachschauen?

Gruß Martin!

bei Antwort benachrichtigen
mr.escape martinx24 „Hallo Mr. Escape! Danke für Deine Antwort - kennst Du auch noch die...“
Optionen

Wie sieht den so ein "Backspace und n" (neue Zeile) oder ein "Backspace und b" (Rückschritt) aus?
Das sind doch wohl steuer- und keine druckzeichen.

In sachen html ist http://de.selfhtml.org/ ganz gut.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
martinx24 mr.escape „Wie sieht den so ein Backspace und n neue Zeile oder ein Backspace und b...“
Optionen

Hallo!
Sorry mein Fehler! Ich meine natürlich "Backslash mit n" bzw. "Backslash mit b"

Gruß Martin!

bei Antwort benachrichtigen
matthew76 Nachtrag zu: „_sleep() in c“
Optionen

HI, danke martin für die Mühe. Aber ein Fehler ist in diesem Programm noch. Wenn ich das Programm compiliere werden mir 7 error angezeigt. Alle in Zeile 24 bei der for() - Schleife. Dort hast du scheinbar vergessen eine Klammer zu schließen. Ich habe vergeblich versucht das Programm selbst zu reparieren, aber ich bekomme die Fehler nicht ganz weg. Kann bitte jmd. versuchen das Programm zu flicken?

mfg- matthew

bei Antwort benachrichtigen
martinx24 matthew76 „_sleep() in c“
Optionen

Hallo Matthew!

Falls Du mir Deine E-Mail-Adresse nennst, kann ich Dir den Quellcode auch im Originalformat zukommen lassen...

Gruß Martin!

bei Antwort benachrichtigen
matthew76 Nachtrag zu: „_sleep() in c“
Optionen

subbe@netcologne.de

wäre nett wen du mir den queallcode schickst

bei Antwort benachrichtigen
martinx24 matthew76 „_sleep() in c“
Optionen

Hallo!
Quellcode wurde verschickt...
Gruß Martin!

bei Antwort benachrichtigen