Forum » Programiranje » [C++] Pridobivaje in brisanje le dolocenih znakov
[C++] Pridobivaje in brisanje le dolocenih znakov
mloncaric ::
Pozdravljeni!
Trenutno delam en program v katerem glede na @pogoj lahko vnasam znake.
Prostor pogoj je spremenljivka tipa string v kateri so vsi mozni znaki, dovoljeni uporabniku za vnos...
Problem je v tem, kadar uporabnik pritisne backspace tipko, na ekranu ne posodobi stanja vendar se program sam posodobi...
Eh, dovolj nakladanja:)
Tukaj je koda:
Podrobneje:
Kadar uporabnik pritisne tipko v programu, se v podprogramu start() preko getch() funkcije pridobi znak, katerega nato v podprogramu preveri_vnos preverim z prostorom pogoj(ze prej omenjenim).
Ce znak ustreza pogoju, ga dodam k prostoru beseda in izpisem na ekran znak, drugace pa ne...
010 je sifra za backspace, torej, ce znak ustreza tej cifri potem odstranim zadnji znak iz besede...
In tukaj je zdaj problem...
Kako naj jaz odstranim zadnji vidni znak iz ekrana?
Poskusal sem ze poiskat kaj koristnega na googlu, vendar nisem nic nasel...
Upam, da ima kdo kaksne ideje, tudi kaksna drugacna resitev bi bila zazeljena.
Hvala!
LP
Trenutno delam en program v katerem glede na @pogoj lahko vnasam znake.
Prostor pogoj je spremenljivka tipa string v kateri so vsi mozni znaki, dovoljeni uporabniku za vnos...
Problem je v tem, kadar uporabnik pritisne backspace tipko, na ekranu ne posodobi stanja vendar se program sam posodobi...
Eh, dovolj nakladanja:)
Tukaj je koda:
#include <iostream> //vhodno-izhodni ukazi #include <stdlib.h> //standardni ukazi #include <conio.h> //getch(), getche(), getchar(), ... #include <string> //za lazje delo z nizi, veljavno le v C++ in ne v C# using namespace std; //uporaba imenskega prostora ni treba pisati std::ukaz const string VELIKE_CRKE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const string male_crke = "abcdefghijklmnopqrstuvwxyz"; const string stevilke = "0123456789"; void start(string & beseda, string pogoj); void preveri_vnos(char znak, string pogoj, string & beseda); int main() { string pogoj = VELIKE_CRKE+male_crke+stevilke+" "; string beseda; cout<<"Podaj stavek:\n"; start(beseda, pogoj); cout<<"\n"<<beseda<<endl; system("pause"); return 0; } void start(string & beseda, string pogoj) { char znak; do { znak = getch(); preveri_vnos(znak, pogoj, beseda); } while(znak != 015 || beseda[0] == '\0'); } void preveri_vnos(char znak, string pogoj, string & beseda) { short i = 0; do { if(pogoj[i]==znak) { beseda += znak; cout<<znak; break; } i++; } while(pogoj[i] != '\0'); short dolzina = beseda.length(); if(znak == 010 && dolzina != 0) { beseda.erase(dolzina-1, 1); } }
Podrobneje:
Kadar uporabnik pritisne tipko v programu, se v podprogramu start() preko getch() funkcije pridobi znak, katerega nato v podprogramu preveri_vnos preverim z prostorom pogoj(ze prej omenjenim).
Ce znak ustreza pogoju, ga dodam k prostoru beseda in izpisem na ekran znak, drugace pa ne...
010 je sifra za backspace, torej, ce znak ustreza tej cifri potem odstranim zadnji znak iz besede...
In tukaj je zdaj problem...
Kako naj jaz odstranim zadnji vidni znak iz ekrana?
Poskusal sem ze poiskat kaj koristnega na googlu, vendar nisem nic nasel...
Upam, da ima kdo kaksne ideje, tudi kaksna drugacna resitev bi bila zazeljena.
Hvala!
LP
- spremenil: mloncaric ()
mloncaric ::
Huh, tale '\b' deluje, vendar le do neke mere...
Sedaj lahko izbrisem podani znak, vendar le ta ostane na ekranu, dokler ga ne prepisem...
Sedaj lahko izbrisem podani znak, vendar le ta ostane na ekranu, dokler ga ne prepisem...
mloncaric ::
Ok, sedaj sem naredil zasilni popravek programa...
V zadnjem if stavku programa sem dopisal le tole:
cout<<"\b \b";//backspace+space+backspace
Stvar deluje! Zanima me le se ali je mozno tole na kaksen drugacen nacin resit.
Hvala!
LP
V zadnjem if stavku programa sem dopisal le tole:
cout<<"\b \b";//backspace+space+backspace
Stvar deluje! Zanima me le se ali je mozno tole na kaksen drugacen nacin resit.
Hvala!
LP
Zgodovina sprememb…
- spremenil: mloncaric ()
mloncaric ::
Samo eno vprasanje se...
Mogoce veste kaksen je znak za enter?
Osmiska vrednost je 015, kaksen je pa znak?
Hvala
Mogoce veste kaksen je znak za enter?
Osmiska vrednost je 015, kaksen je pa znak?
Hvala
mloncaric ::
Zdravo, tudi '\n' sem ze probal, vendar ni delalo.
Koda za zdaj taksna, kot je, deluje pravilno!
Mogoce ni ravno najbolj optimalna, ampak za eksperimentiranje pa bo.
Hvala vsem za pomoc!
LP
Koda za zdaj taksna, kot je, deluje pravilno!
Mogoce ni ravno najbolj optimalna, ampak za eksperimentiranje pa bo.
Hvala vsem za pomoc!
LP
Gundolf ::
A ni \r\n za windowse/dos, \n\r pa na macih?
Sicer pa so prevajalniki za windows/dos tako pametni, da ti spremenijo \n v karkoli je že treba.
Sicer pa so prevajalniki za windows/dos tako pametni, da ti spremenijo \n v karkoli je že treba.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] Naloga seznamOddelek: Programiranje | 3286 (2561) | Matic1911 |
» | Dll napisan v C++ importan v C# aplikacijoOddelek: Programiranje | 3870 (3657) | cikopero |
» | [C++] Kopiranje char arraya v drug char arrayOddelek: Programiranje | 1272 (1143) | win64 |
» | [C++] Nasvet pri char konstantahOddelek: Programiranje | 1016 (937) | zhigatsey |
» | c++ datotekeOddelek: Programiranje | 4044 (3533) | Vesoljc |