Skrivemaskine effekt

Tags:    c++ html html5

Davs

Jeg har brug for en skrive maskine effekt i en konsol app.
Nogen ideer?



--------------------------------------------------
Regards Rasmus Hamberg



10 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Davs

Jeg har brug for en skrive maskine effekt i en konsol app.
Nogen ideer?



--------------------------------------------------
Regards Rasmus Hamberg


lav en string, indeholdet orderet
Lav en løkke der udskriver bogstaver, for bogstav
Sørg for at lave delay mellem hver runde løkken køre.

Du skulle meget gere ngive en skrivemaskin effekt.

-Thomas





Jeg skal lave en tekst som kommer frem med en skrivemaskine effekt men jeg ved ikke hvordan jeg tager et bogstav af gangen ud af en string!
--------------------------------------------------
Regards Rasmus Hamberg


Her er et lille eksempel

Fold kodeboks ind/udKode 


Det eneste problem er at funktionen sleep kun godkender heltal, så den sover i et helt sekund. Det er ret meget.
system("sleep 0.1") fungere i Linux, men jeg tvivler på det fungere under andre os's.

Se også denne artikel. Her forklares hvad iterator er for noget: http://udvikleren.dk/article.php?techid=1&aid=236

[Redigeret d. 15/01-05 13:15:55 af Jesper Mikkelsen]



Davs

Jeg har brug for en skrive maskine effekt i en konsol app.
Nogen ideer?



--------------------------------------------------
Regards Rasmus Hamberg

Vil lige høre hvad det du helt præcist skal lave er. Er det hvor brugerens input fremkommer på skærmen, som denne bruger tasterne, eller er det hvor du har en string du skal have udskrevet. Hvis det er sidstnævnte burde Thomas svar virke. Hvis det var førstnævnte, kan du muligvis bruge dette:

Fold kodeboks ind/udKode 


Denne kan du så udbygge med getch () i stedet for getche(). getch () henter kun tasten (ascii-værdien) og udskriver den ikke. Dette har den fordel, at du kan sætte nogle variabler ind for x og y positionen på skærmen, og udskrive værdien på diverse punkter. Endvidere kan du indbygge en switch, der checker om tasten var backspace, og i så tilfælde sletter forgående værdi. Dette må du selv arbejde lidt med.





Men hvordan for jeg fat i et enkelt bogstav af ordet?
--------------------------------------------------
Regards Rasmus Hamberg



Måske skulle du prøve at forklare hvad det er du vil.



Jeg skal lave en tekst som kommer frem med en skrivemaskine effekt men jeg ved ikke hvordan jeg tager et bogstav af gangen ud af en string!
--------------------------------------------------
Regards Rasmus Hamberg



På windows kan man bruge Sleep, der angiver man tiden i milisekunder.

Man kunne også bruge:
std::string x = "Hej med dig";
for(std::string::size_type n = 0; n < x.size(); n++)
{
std::cout << x[n] << std::flush;
Sleep(100);
}
Eller:
char y[] = "Hej med dig";
for(int n = 0; y[n] ; n++)
{
std::cout << y[n] << std::flush;
Sleep(100);
}

Inkluder windows.h for at få fat i Sleep



Det eneste problem er at funktionen sleep kun godkender heltal, så den sover i et helt sekund. Det er ret meget.
system("sleep 0.1") fungere i Linux, men jeg tvivler på det fungere under andre os's.


Det ville sikkert virke hvis man bruger cygwin.
Man kan lave små delay's under linux (og de fleste kompilere på windows) ved at bruge select:

http://www.hmug.org/man/2/select.html



Jeg skal lave en tekst som kommer frem med en skrivemaskine effekt men jeg ved ikke hvordan jeg tager et bogstav af gangen ud af en string!
--------------------------------------------------
Regards Rasmus Hamberg


En string er essentielt et array af bytes (char), ligesom alt andet (long og float er 4 bytes, ligesom int er 4 bytes på 32-bit cpu'er, short er 2 bytes og char er 1 byte).
Hvis du behøver en byte i array'et, skal du bare tilgå den via [] operatoren (som kræver et nummer), som for eksempel string[1].
Array'et begynder altid ved 0, dvs. at hvis du vil have 'h' af char s[] = "hej" skal du bruge s[0].

Hvis du bruger std::string, så kan du også tilgå den via [], men jeg tror ikke at der er overflow tjek (altså at den tjekker om du tilgår en byte uden for array'et, hvilket kan resultere i at programmet lukker ned med fejl), så hvis du er vant til det, skal du vist bruge s.at(int) eller noget i den stil (det kan man i hvert fald med std::vectors).

1101110100010110000101000001

[Redigeret d. 15/01-05 14:54:09 af Nicolai Lyster Fersner]



Jeg skal lave en tekst som kommer frem med en skrivemaskine effekt men jeg ved ikke hvordan jeg tager et bogstav af gangen ud af en string!
--------------------------------------------------
Regards Rasmus Hamberg


En string er essentielt et array af bytes (char), ligesom alt andet (long og float er 4 bytes, ligesom int er 4 bytes på 32-bit cpu'er, short er 2 bytes og char er 1 byte).
Hvis du behøver en byte i array'et, skal du bare tilgå den via [] operatoren (som kræver et nummer), som for eksempel string[1].
Array'et begynder altid ved 0, dvs. at hvis du vil have 'h' af char s[] = "hej" skal du bruge s[0].

Hvis du bruger std::string, så kan du også tilgå den via [], men jeg tror ikke at der er overflow tjek (altså at den tjekker om du tilgår en byte uden for array'et, hvilket kan resultere i at programmet lukker ned med fejl), så hvis du er vant til det, skal du vist bruge s.at(int) eller noget i den stil (det kan man i hvert fald med std::vectors).

1101110100010110000101000001

[Redigeret d. 15/01-05 14:54:09 af Nicolai Lyster Fersner]


Ja, man kan godt bruge at med std::string, så kaster den en exception hvis man går ud over enden.

Fold kodeboks ind/udKode 




t