Como mínimo, en la condición del bucle while.
while ((res == 0) || (cad[i] != '\0')) {
Cambiando el operador || (OR) por && (AND)
while ((res == 0) && (cad[i] != '\0') ) {
De todas formas, aunque este disponible como
#include <string.h>
char *strchr(const char *s
, int c
);
como ejercicio de programación , yo haría esta:
int EncontrarCaracter(const char cad[], const char n)
{
const char *c;
for ( c=cad; *c && (*c!=n);c++);
return *c;
}
Es un poco crípitica, pero my C-style... Devuelve 0 si no esta, o el valor decimal del caracter ASCII si esta...
Ojo! Sería ambiguo preguntar por el caracter "\0", ya que en toda cadena de C, está, y devolvería precisamente 0, que es su valor en decimal...
Entoces... está o no está? Parece que está, pero el convenio escogido dice que no. Ojo!
La "strchr" dice que devuelve un PUNTERO a la primera ocurrencia de ese valor... El caracter nulo "\0" es considerado PARTE de la cadena.