Hallo Zusammen,
ich habe ein Problem und hoffe ich bekomme von euch eine Lösung.
Und zwar ich möchte gerne während der Funktion rand() am laufen ist,
Zeichen eingeben. das Drücken der Enter-Taste sollte mein Programm
abbrechen und die bis hin eigegebenen Zeichen miteinander hängen und als
ein String ausgeben.
bis jetzt schaffe ich es mit diesem Program die Eingabe der Zeichen aber
ich weiß nicht wie ich weiter machen sollte, um die Zeichen als einzeln
String auszugeben.
ich würde mich au euren Ideen freuen.
Mfg
int main()
{
int c;
int a;
while (1)
{
a = rand()% 100;
printf("%i\n", a);
_sleep(100);
if (kbhit())
{
c =_getch();
if (c == '\r')
{
break;
}
printf("%c\n", c);
}
}
printf("You Pressed enter, End Of Program");
return 0;
}
Wenn du einen String einlesen willst - warum dann einzelne Char einlesen und nen dann nen String zusammenschustern? Was spricht gegen fgets aus dem stdio Header?
Gast
#5504946
char txt[1000]; char *p=txt; while(p<txt + sizeof txt) statt while(1) *p++=c; statt direkter Ausgabe *p=0; am Ende Und wundern, warum es Abstürzt, wenn man nicht früh genug beendet.
vielleicht so?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
funktionniert leider nicht
> Was spricht gegen fgets aus dem stdio Header?
das Problem mit fgets ist, dass das Programm gestoppt wird bis ein
String eingelesen wird und das will ich aber nicht. ich will
gleichzeitig mit der rand() Zeichen eingeben und nach dem Drücken der
Enter-Taste die eingegebenen Zeichen zusammen hängen und als String
ausgeben.
Gast
#5505083
Es scheint so, als wenn Du annimmst, dass die Funktion rand() eine lange Zeit (im Vergleich zu der Zeit, die der Benutzer für eine Eingabe braucht) benötigt, bis sie fertig ist. Wie kommst Du zu dieser Annahme? In diesem Forum ist es im übrigen so, dass konkrete Fragen erwartet werden. Du hingegen teilst nur mit, dass Du bei einem bestimmten Problem nicht weiterkommst. Was ist das Hindernis genau? Im Kontext Deines ganzen Beitrages und im Sinne einer Hilfe zur Selbsthilfe kann man nur erwidern: 1. Lerne, was der Unterschied zwischen Zeichen und Strings (Zeichenketten) ist und welche Operationen es auf die beiden gibt. 2. Bechreibe die Abfolge der Operationen so, dass Zeichen zu einem String zusammengefügt werden.
Kaiser K. schrieb: > funktionniert leider nicht geile Fehlermeldung, suche den Fehler!
> geile Fehlermeldung, suche den Fehler!
sorry war mein Fehler... Funktioniert
Kaiser K. schrieb: >> geile Fehlermeldung, suche den Fehler! > > sorry war mein Fehler... Funktioniert na prima und lernst du was aus dem Code?
> na prima und lernst du was aus dem Code?
sicher lerne ich was von dem Code. Vielen Dank nochmal für Hilfe
Gast
#5505588
Der Kaiser K. verarscht und doch!
Kaiser K. schrieb: >> Was spricht gegen fgets aus dem stdio Header? > > das Problem mit fgets ist, dass das Programm gestoppt wird bis ein > String eingelesen wird und das will ich aber nicht. Hmm, schade. Das hätte nämlich den Vorteil gehabt, dass dein Programm nicht ständig einen CPU-Core zu 100% auslastet, indem es pro Sekunde ein paar Millionen mal nachfragt, ob inzwischen eine Taste gedrückt wurde.
Gast
#5506216
> CPU-Core zu 100% auslastet, indem es pro Sekunde ein > paar Millionen mal nachfragt In diese Wiederholschleife könnte man ja einen delay mit ein paar ms einbauen.
Stefanus F. schrieb: >> CPU-Core zu 100% auslastet, indem es pro Sekunde ein >> paar Millionen mal nachfragt > > In diese Wiederholschleife könnte man ja einen delay mit ein paar ms > einbauen. Das ist aber auch keine saubere Lösung.
Rolf M. schrieb: >>In diese Wiederholschleife könnte man ja einen delay mit ein paar ms >>einbauen. > > Das ist aber auch keine saubere Lösung. Polling ist das 1. Problem - und die Schleifen ohne Pausen sind dann das daraus resultierende 2. Problem Und wenn nun ein Core mit 100% ausgelastet ist - kannst Du ja ein fork starten, der im Polling nur auf Enter wartet ... so bekommst du nach und nach die Last auf der CPU verteilt ;-)
Joachim B. schrieb: > vielleicht so? > > >
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
hast du Vllt eine Idee wie man von dieser While- Funktion rauskommt und eine andere starte ohne die Funktion break? also: ZB wenn ich start eintippe sollte dAs programm von dieseer while funktion zu einer zweiten springen.
falsch zitiert
while darf nie verlassen werden, baue doch weiter Funktionen innerhalb
while(1) ein
hinter kbhit!
dort steht in
strcpy(in_command, in_buff);
in_command dein Eingabebefehl
mit
if(!strcmp(in_command, "start"))
{
// Programmteil "start" ausführen
start();
// danach ist der Befehl ja ausgefuehrt und kann geloescht werden
*in_command=0;
}
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.