» »

[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:

#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

BigWhale ::

Premaknes kurzor eno v levo in napises tja space? ;)

mloncaric ::

Ne gre, sem ze probal...

Gundolf ::

Vržeš '\b' na ekran (backspace).

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...

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

Zgodovina sprememb…

mloncaric ::

Samo eno vprasanje se...
Mogoce veste kaksen je znak za enter?
Osmiska vrednost je 015, kaksen je pa znak?

Hvala

--- ::

#define RETURN 13

Gundolf ::

'\n'

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

BigWhale ::

Ce bi rad v novo vrstico je to v 'DOS-u' tudi \n\r

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.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] Naloga seznam

Oddelek: Programiranje
223284 (2559) Matic1911
»

Dll napisan v C++ importan v C# aplikacijo

Oddelek: Programiranje
113870 (3657) cikopero
»

[C++] Kopiranje char arraya v drug char array

Oddelek: Programiranje
71272 (1143) win64
»

[C++] Nasvet pri char konstantah

Oddelek: Programiranje
61016 (937) zhigatsey
»

c++ datoteke

Oddelek: Programiranje
464044 (3533) Vesoljc

Več podobnih tem