Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

String problem prost al....

[es] :: C/C++ programiranje :: String problem prost al....

[ Pregleda: 3419 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.verat.net.

Sajt: www.vaha.net


Profil

icon String problem prost al....24.05.2005. u 23:57 - pre 229 meseci
pozdrav svima, ovo mi je prvi zadatak sa stringovima.

1. Imam problem sa petljom while:
Code:
#define MAX_SIZE 30
.
.
.
 do
    { 
       printf(" Enter String::: ");
       gets(str);
    }

 while (strlen(str)<MAX_SIZE);

ova protekcija ne radi. znal iko resenje ovog sitnog problema?

2. opet while:
Code:


void main()
{
 ...
do 
  {
     clrscr();
     printf(" Enter String::: ");
     gets( str ); 
     neka_funkcija( str );
     printf(" Result:: %s ", str );

   printf("\n\n\n\t\t\t Do you want to continue (y/n)");
   flushall();
   scanf(" %c ", &answer);
   } 
    
   while (answer == 'y' || answer=='Y');
}

Prvi put sve lepo radi, al kad se izabere (y ili Y) nema ponovnog unosa stringa (printf(" enter string");),to se preskace i ide na (y/n).

vaha.net
 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: String problem prost al....25.05.2005. u 00:18 - pre 229 meseci
pozdrav,

prvi problem je jednostavan (drugi jos nisam pogledao). funkcija gets() ucitava string. tek kada funkcija zavrsi ucitavanje program nastavlja radeci while(...).
prema tome mozes da u svoj string ubacis mnogo vise od MAX_SIZE jer kontrola koju primenjujes proverava tek kada je sve gotovo.
 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: String problem prost al....25.05.2005. u 00:23 - pre 229 meseci
pozdrav,

za drugi slucaj, da li pritiskas <enter> kada ubacujes karakter? ako je odgovor da onda bi trebao da imas problem jer scan uzme jedan karakter a zatim gets uzme <enter> i smatra da si zavrsio unosenje niza.
 
Odgovor na temu

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.verat.net.

Sajt: www.vaha.net


Profil

icon Re: String problem prost al....25.05.2005. u 00:25 - pre 229 meseci
lose sam objasnio problem. Jednostavno mi treba zastita probijanja opsega stringa.
MAX_VEL= 30. Znaci korisnik moze uneti 29 karaktera i to je sve.
vaha.net
 
Odgovor na temu

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.verat.net.

Sajt: www.vaha.net


Profil

icon Re: String problem prost al....25.05.2005. u 00:35 - pre 229 meseci
Citat:
obranko: pozdrav,

za drugi slucaj, da li pritiskas <enter> kada ubacujes karakter? ako je odgovor da onda bi trebao da imas problem jer scan uzme jedan karakter a zatim gets uzme <enter> i smatra da si zavrsio unosenje niza.


da, unosim karakter, to je ono da li zelis nastaviti ili prekinuti program. Pod nastaviti se podrazumeva sve iz pocetka.

znacil ovo da ne mogu koristiti while petlju?

vaha.net
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
62.84.152.*



+9 Profil

icon Re: String problem prost al....25.05.2005. u 11:30 - pre 229 meseci
Hm..a zasto nebi probao ovo:

Code:

#include<iostream>
#include<string>
using namespace std;

int main(int argc, char *argv[])
{
  string x;
  cin >> x;
  if(x.length()>29){
    x.erase(29,x.length()-29);
  }
}



Zar nije laske ovako? Nemas nikakve opasnosti od prekoracenja stringa ili bilo cega drugog, a dobijas samo prvih 29 karaktera u slucaju da neko unese vise od 29.
A i ne znam da li ti bas treba u C-u ili moze C++.
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
212.200.120.*



Profil

icon Re: String problem prost al....25.05.2005. u 12:49 - pre 229 meseci
Mislim da u konzolnim programima ne mozes da ogranicis koliko ce tacno karaktera uneti neko sa ekrana. Mozda gresim ali mislim da ne postoji neka standardna bilbioteka koja bi to radila.
U svakom slucaju posto mi se cini da ti treba resenje u C-u, mozes umesto da citas ceo string pa posle odsecas deo koji ti treba, jednostavno da citas prvih 30 karaktera sa tastature a one kasnije zanemaris. Odnosno nesto u fazonu:

Code:


for(i=0;i<MAX_SIZE-1;i++) {
        if ((str[i]=getchar())=='\n') break; //ovo ako neko lupi enter pre 30. karaktera
                                                      //ti naravno radi proveru i za razmake ako zelis
}

/* naravno ne zaboravi da na kraju stavis null karakter 
   takodje primeti da ako izletimo iz for petlje pomocu break
   prepisacemo taj karakter koji nam nije potreban sto je inace dobro
   a ako for petlja zavrsi regulano ciklus onda ce se upisati zadnji karakter
   sto je opet kako treba */

str[i]='\0';



jedino sto je problem sto opet mogu da se unesu i vise od 30 karaktera jer getchar pocne da cita tek kada se lupi enter na tastaturi. jednom sam video neku f-ju koja je citala karaktere odmah po unosenju ali nisam uspeo sada da je nadjem (mislim da je bila kreacija nekog lika tako da nije standardna). Ako naletim ostavicu ti je ovde i to ce ti resiti problem.

U drugom problemu jedino ne znam cemu sluzi funkcija flushall(), mozda je problem do nje. U svakom slucaju probaj nesto ovako:

Code:


    ...
   flushall();
   printf("\n\n\n\t\t\t Do you want to continue (y/n)");
   answer=getchar();

   ...




I drink to make other people interesting.
 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: String problem prost al....26.05.2005. u 00:01 - pre 229 meseci
pozdrav,

za prvi slucaj pogledaj ovaj link
http://www.cplusplus.com/ref/iostream/istream/getline.html

funkcija getline je ono sto tebi treba.

 
Odgovor na temu

vahid
vaha.net

Član broj: 54067
Poruke: 18
*.vdial.verat.net.

Sajt: www.vaha.net


Profil

icon Re: String problem prost al....26.05.2005. u 00:04 - pre 229 meseci
hvala puno mislim da sam delimicno resio ovaj drugi problem:
ne znam da li je ovo "programerski", ali ovo gets(string); je resilo problem.
scanf uzima y ili n za odgovor i posle ide ENTER, ovo gets uzima taj ENTER. Sad radi odlicno i moze da se unosi string iznova svaki put kad se odlucim za Y(es).

HVALA: obranko na ukazivanju problema :)

Code:


void main ()
{
   printf(" unesi string");
   gets(string);
....
   flushall();
   printf("\n\n\n\t\t\t Do you want to continue (y/n)");
   scanf("%c",&answer);
   gets(string);
... 


flushall()- koliko sam ja shvatio, a i sama rec znaci= nesto isprati, u ovom mom slucaju: kad se program izvrsi "izbrise se sve sto je ostalo" i ponudi se korisniku ponovno koriscenje.


vaha.net
 
Odgovor na temu

[es] :: C/C++ programiranje :: String problem prost al....

[ Pregleda: 3419 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.