» »

c++ problem

c++ problem

__jack__ ::

Naletel sem na sledeč problem

V DEV-C++ sem napisal na tak način igrico obešenec, v Visual Studio pa 4. vrstica javi napako.

string a;
string b;
cin >> b;
a[3]=b[3];
cout << a[3];


Kaj je problem pri 4. vrstici, da v Visualu ne dela?
  • spremenil: __jack__ ()

mn ::

V tvojem primeru je std::string a dolg tocno 0 znakov, ti pa pises na cetrto mesto v praznem stringu. S tem si naredil Buffer Overflow! Tvoj prevajalnik ocitno to preverja in javi napako. Na gcc-ju recimo se takoda normalno prevede in izvede, kar pa se ne pomeni, da je pravilna!
Pa se mimogrede, drugic vsaj se napisi kaksno napako ti javi!
Aja, pa se nekaj. Problem je tudi v b[3], ker zopet beres cetrti znak iz stringa, ki je lahko krajsi kot 4 znake!

__jack__ ::

Aha, to pomeni da je treba string prej popisat z znaki, nato pa deluje.

mn ::

Naceloma, ja. Ampak ne razumem kaj zelis doseci. Koda spodaj bi morala delat, ampak tole kar je napisano je zelo dalec od lepega programiranja!

string a = "    ";
string b;
cin >> b;
if(b.size()>=4){
   a[3]=b[3];
   cout << a[3];
}

__jack__ ::

No, kako pa bi potem napravil to, da v main pride nek string, za katerega se ne ve kako dolg je. Nato pa se z for zanko popiše en drug string s samimi podčrtaji, vendar enake dolžine kot string št. 1. Tako sem namreč napravil obešenca.

Npr

string a="jabolko";
string b;
int k;
k=a.size();
for(int i=0;i<k;i++)
{
   b[i]='_';
}


Nato pa se preverja, spet v for zanki, če je uporabnik vnesel ustrezno črko in se potem v string b vpisujejo elementi, ki so v stringu a... itd.

Zgornji program je namreč nemogoče napisat v Visual studio. Torej, kaj bi lahko spremenil?

redo ::

Tvoje je preprosto narobe. Imaš pač srečo, da ti prevajalnik varuje hrbet.
        string a="jabolko";
        string b(a.size(),'_');

__jack__ ::

Evo, ta koda se normalno prevede, ampak vseeno, kaj v njej ni "lepo" in kako bi se dala spremeniti.

string a="jabolko";
	int dol;
	int stev;
    int pon=8;
    int k=0;

	dol=a.size();
	string b (dol,'_');
	
	b[0]=a[0];
	b[(dol-1)]=a[(dol-1)];

	stev=dol-2;
    
	while(1)
	{
	
    
		cout << "beseda je: ";
		for(int i=0;i<(dol);i++)
		{
			cout << b[i] << " ";
		}


		cout << "\nimate se: " << pon << " ponovitev";
	cout << "\nvnesite crko: ";
	char znak;
	cin >> znak;

	cout << endl;
	
	for(int i=1;i<(dol-1);i++)
	{
		if(znak==a[i])
		{
			b[i]=a[i];
			stev--;
			k=1;
		}
	}

   
	if(k==0)
	{
		pon--;
	}
   
    if(pon==0)
	{
		cout << "\nobeseni ste!!\n";
		break;
	}


	if(stev==0)
		break;

   }
	cout << "\n\nbeseda je bila: " << a;

	char f;
	cin >> f;
	return 0;
}



Vredno ogleda ...

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

rabim pomoc naloga c++

Oddelek: Programiranje
7710 (578) kretze
»

Funkcije in prenos po referenci

Oddelek: Programiranje
141834 (1540) xordie
»

Microsoft visual C++ pozabo kako zacet (strani: 1 2 )

Oddelek: Programiranje
754435 (2744) bisernik
»

Se komu da napisat en preprost program v C++!

Oddelek: Programiranje
121313 (1073) alum
»

C++ in igranje mp3-ja

Oddelek: Programiranje
91549 (1224) BigWhale

Več podobnih tem