puedes hacerlo dentro de otro while que compruebe los dígitos dentro del número, luego comprobar por qué se ha salido, si porque el resultado es 0 o porque contiene el patron. Si contiene el patrón lo muestras.
O puedes hacer una función recursiva que haga eso que son más chulas.
bool contienePatron (int num, int patron){
if (num==0)return false;
else (num%10== patron) return true;
else return contienePatron(num/10,patron);
}
-Si el numero es 0, o lo que es lo mismo, ya no quendan digitos por comprobar, es que no contiene el patron, se devuelve false.
-Si hay números, sacamos las unidades del número y comprobamos contra el patron
-Si la unidad no era igual que el patron, llamamos a la funcion de nuevo quitando el último dígito.
El primer if se puede cambiar con el segundo, si los cambias te cogerá el 0 también si es el patrón y lo pasas como primer número.
y ahora el final
while (rangoinf<=rangomax){
if (contiene patron(rangoinf,patron)) cout <<rangoinf;
rangoinf++;
}
Y si no lo quieres hacer con recursividad:
//Ya tienes el patron, rangoinf y rangomax
bool encontrado=false;
int numero=0;
while (rangoinf<=rangomax){
numero=rangoinf;
while ((numero>0)&&(!encontrado)){
if ((numero%10)==patron) {
encontrado=true;
cout <<rangoinf;
}
else numero = numero/10;
}
encontrado=false;
rangoinf++;
}
O pon en el segundo while esto y te ahoras una variable (o_0)):
while ((numero>0)&&((numero%10)!=patron)) numero = numero/10;
if (numero>0) cout <<rangoinf;
Y si quieres contener el 0 pues un >= en el segundo while