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";
}