Stránka 1 z 1

Omezení vstupu C++

Napsal: pon 31. říj 2011, 21:28
od amd.21
Zdravím, zajímalo by mě, jestli jde nějak jednoduše udělat "omezení" vstupu v C++, potřebuju aby mi vstup žral pouze 0-9 a A-J a ostatní znaky nějak zahazoval nebo ignoroval(vstup se ukládá do pole char). Asi by se dala napsat nějaká šílená podmínka, která by porovnávala prvky v poli s ASCII tabulkou, ale nejde to nějak jednodušeji ?
Díky za pomoc.

Re: Omezení vstupu C++

Napsal: pon 31. říj 2011, 22:37
od Caderom

Kód: Vybrat vše

if((vstup[i]>='0' && vstup[i]<='9') || (vstup[i]>='A' && vstup[i]<='J')) {
  vystup[j++]=vstup[i];
}

Re: Omezení vstupu C++

Napsal: úte 1. lis 2011, 07:56
od amd.21
To jsem taky zkoušel, ale nějak mi to nechce fungovat ...

Kód: Vybrat vše

for(short int i = 0;i<pocet;i++)
		{
			if((cislo[i]<='0' && cislo[i]>='9') || (cislo[i]<='A' && cislo[i]>='J'))
			{
				cout << cislo[i] << " neni platny znak !\n";
				cislo[i] = 0;
			}
		}
takhle to mám, ale pouští to všechny znaky a když obrátím nerovnosti (tak jak jsi to měl) tak mi to zas nepustí žádný znak.

Re: Omezení vstupu C++

Napsal: úte 1. lis 2011, 16:37
od Caderom
Já testuji na platný vstup, ty chceš testovat na neplatný. V tom případě musíš ale otočit celý logický výraz, tzn. nahradit spojující || za &&.

Kód: Vybrat vše

for(short int i = 0;i<pocet;i++)
		{
			if((cislo[i]<='0' && cislo[i]>='9') && (cislo[i]<='A' && cislo[i]>='J'))
			{
				cout << cislo[i] << " neni platny znak !\n";
				cislo[i] = 0;
			}
		}
Problém je, že v původním kódu ti např. číslice 0-9 jsou v první závorce správně vyhodnoceny, že podmínku nesplňují, ale dál se pokračuje přes || a v druhé závorce již platí, že '0'-'9' <= 'A'. V opačném pořadí závorek výrazu to pak platí i pro písmena 'A'-'J'.

Re: Omezení vstupu C++

Napsal: úte 1. lis 2011, 17:05
od amd.21
Zkusil jsem, i přesto mi to např. znak W "pustí" dál,vyřešil jsem to takhle:

Kód: Vybrat vše

for(short int i = 0;i<pocet;i++)
		{
			if(cislo[i]>='0' && cislo[i]<='9')
				continue;
			else if(cislo[i]>='A' && cislo[i]<='J')
				continue;
			else
			{
				cout << cislo[i] << " neni platny znak !\n";
			}

		}

Re: Omezení vstupu C++

Napsal: úte 1. lis 2011, 18:57
od Caderom
Jo, to by snad taky mělo chodit. Omlouvám se, myšlenka byla správná, provedení nedotažené, když otočit logický výraz, tak opravdu celý. Tedy mi scházelo nahradit ještě && za ||. Doufám, že takhle by už to mohlo chodit:

Kód: Vybrat vše

for(short int i = 0;i<pocet;i++)
		{
			if((cislo[i]<='0' || cislo[i]>='9') && (cislo[i]<='A' || cislo[i]>='J'))
			{
				cout << cislo[i] << " neni platny znak !\n";
				cislo[i] = 0;
			}
		}
// EDIT: No a nebo šlo jednoduše původní podmínku znegovat :-)

Kód: Vybrat vše

if( ! ((vstup[i]>='0' && vstup[i]<='9') || (vstup[i]>='A' && vstup[i]<='J')) ) {
  cout << vstup[i] << " neni platny znak !\n";
}