Cometes bastantes fallos.
1. Tecla tiene un tamaño menor al que en verdad usa. Has reservado 5 bytes pero las cadenas tienen un byte más, el '\0' que marca el fin de cadena, por tanto deberías haber declarado tecla[6] o simplemente tecla[] pues si se define con una cadena C automáticamente reserva memoria.
2. Creas un array de chars con la intención de convertirlo en una cadena cuándo sólo quienes obtener un carácter.
Una cadena tiene, al menos 1 carácter, el nulo '\0' que marca fin de cadena.
Si tu intención es crear una cadena con 1 caracter válido debes reservar una memoria de 2 carácteres: uno para el carácter y otro para el carácter nulo.
3. Recoges una cadena de tamaño arbitrario mediante scanf("%s", vo);. Al hacer esto puedes cargar una cadena muy larga en vo y va a sobrepasar a la memoria que has pedido para la variable, por lo que se escribirá una parte de la memoria de la que no se tiene control. Puede pasar cualquier cosa, hasta que tu ordenador entre en internet, hackee un silo de misiles nucleares e inicie la tercera guerra mundial.
Para solventar eso haz que scanf tan solo tome 1 único carácter con scanf("%1s", vo);.
4. strcmp espera que se le pasen dos punteros que apunten a una cadena. Cuando tu pasas como argumento tecla[3] en realidad le estás pasando lo que hay en la cuarta posición de la cadena tecla, que es el caracter O. Como un carácter internamente es un valor numérico strcmp tomará ese valor numérico identificándolo como la dirección de inicio de una cadena. Seguro que el programa te va a fallar porqué el S.O. verá que esa posición de memoria no pertenece al segmento de tu programa y para evitar males mayores lo va a abortar.
1. Tecla tiene un tamaño menor al que en verdad usa. Has reservado 5 bytes pero las cadenas tienen un byte más, el '\0' que marca el fin de cadena, por tanto deberías haber declarado tecla[6] o simplemente tecla[] pues si se define con una cadena C automáticamente reserva memoria.
2. Creas un array de chars con la intención de convertirlo en una cadena cuándo sólo quienes obtener un carácter.
Una cadena tiene, al menos 1 carácter, el nulo '\0' que marca fin de cadena.
Si tu intención es crear una cadena con 1 caracter válido debes reservar una memoria de 2 carácteres: uno para el carácter y otro para el carácter nulo.
3. Recoges una cadena de tamaño arbitrario mediante scanf("%s", vo);. Al hacer esto puedes cargar una cadena muy larga en vo y va a sobrepasar a la memoria que has pedido para la variable, por lo que se escribirá una parte de la memoria de la que no se tiene control. Puede pasar cualquier cosa, hasta que tu ordenador entre en internet, hackee un silo de misiles nucleares e inicie la tercera guerra mundial.
Para solventar eso haz que scanf tan solo tome 1 único carácter con scanf("%1s", vo);.
4. strcmp espera que se le pasen dos punteros que apunten a una cadena. Cuando tu pasas como argumento tecla[3] en realidad le estás pasando lo que hay en la cuarta posición de la cadena tecla, que es el caracter O. Como un carácter internamente es un valor numérico strcmp tomará ese valor numérico identificándolo como la dirección de inicio de una cadena. Seguro que el programa te va a fallar porqué el S.O. verá que esa posición de memoria no pertenece al segmento de tu programa y para evitar males mayores lo va a abortar.